【问题标题】:Laravel Slugable Route Model Binding weird behaviourLaravel Slugable Route Model 绑定奇怪的行为
【发布时间】:2021-12-29 09:40:45
【问题描述】:

我的项目中有一个包含最新新闻文章的部分。为此,我有一个:

  1. 后模型
  2. 发布资源控制器和一个
  3. 资源发布路线。

后模型

class Post extends Model
{
    use HasFactory, Sluggable;

    protected $fillable = [...,...];

    public function getRouteKeyName()
    {
        return 'slug';
    }

    public function sluggable(): array
    {
        return [
            'slug' => [
                'source' => 'title'
            ]
        ];
    }
}

PostController.php

public function show(Post $post)
{
    dd($post);
}

web.php

Route::resource('/posts', App\Http\Controllers\PostController::class)->only(['index','show']);

索引(http://localhost/news)和显示(http://localhost/news/{slug})按预期工作!

现在我注意到的问题/错误:

当我将路径从 posts 更改为 news 时,show 方法不再起作用。 索引仍然有效。

从帖子到新闻的修改路径

Route::resource('/news', App\Http\Controllers\PostController::class)->only(['index','show']); 

http://localhost/news 有效,但 http://localhost/news/{slug} 只显示 PostModel 结构。

您知道问题所在吗?我该怎么做才能让它发挥作用?我使用 Laravel 8 和 "cviebrock/eloquent-sluggable": "^8.0" package作为蛞蝓。感谢您的宝贵时间!

【问题讨论】:

    标签: laravel route-model-binding


    【解决方案1】:

    好的。我想通了。我在这里为可能遇到与我相同问题的任何人写答案。首先。这不是一个错误。如果您调整路由以使模型名称不再包含在路由中,则您必须显式绑定路由。 https://laravel.com/docs/8.x/routing#explicit-binding

    所有你必须做的。在 RouteServiceProvider.php 的 boot() 方法中,添加所需的路由并将其与所需的类绑定。就我而言,这是新闻而不是帖子。

    public function boot()
    {
        ....
        Route::model('news', \App\Models\Post::class);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-17
      • 2020-04-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-01
      相关资源
      最近更新 更多