Laravel 8 限定范围的资源路由
有时,在定义资源路由时隐式绑定了多个 Eloquent 模型,你希望限定第二个 Eloquent 模型必须为第一个 Eloquent 模型的子模型。例如,考虑这样一个场景,通过 slug 检索某个特殊用户的一篇文章:
use App\Http\Controllers\PostsController;
Route::resource('users.posts', PostsController::class)->scoped();
你可以通过给 scoped
方法传递一个数组来覆盖默认的模型路由键:
use App\Http\Controllers\PostsController;
Route::resource('users.posts', PostsController::class)->scoped([
'post' => 'slug',
]);
当使用一个自定义键的隐式绑定作为嵌套路由参数时,Laravel 会自动限定查询范围,按照约定的命名方式去父类中查找关联方法,然后检索到对应的嵌套模型。在这种情况下,将假定 User
模型有一个叫 posts
(路由参数名的复数)的关联方法,通过这个方法可以检索到 Post
模型。