0

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

  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);
}

网页.php

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

Index ( http://localhost/news) 和 show ( 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蛞蝓。谢谢你的时间!

4

1 回答 1

0

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

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

public function boot()
{
    ....
    Route::model('news', \App\Models\Post::class);
}
于 2021-11-18T14:40:26.743 回答