我按照教程添加了中间件,检查用户在加载页面时是否是管理员。它适用于普通视图路线,例如
Route::get('/admin/something', 'AdminController@admin_something')
->middleware('is_admin')
->name('admin');
但是我现在有一个资源路由,当我将名称和中间件添加到路由时出现错误。所以这在没有身份验证的情况下工作:
Route::resource('thingies', 'ThingyController');
但有了这个:
Route::resource('thingies', 'ThingyController')
->middleware('is_admin')
->name('admin');
我收到一个错误:
Symfony Component Debug Exception FatalThrowableError (E_RECOVERABLE_ERROR) Too few arguments to function IlluminateRoutingPendingResourceRegistration::name(), 1 passed in /var/www/routes/web.php on line 24 and exactly 2 expected
我需要采取哪些不同的操作才能将此身份验证添加到资源路由?
您不能在资源路由的末尾使用->name('admin');
将路由命名为"admin">,因为它在一个语句中涉及所有 CRUD 路由,并且 Laravel 内置系统已经命名了它们。
你走得很好,只需像这样删除最后一行,它应该可以工作:
Route::resource('thingies', 'ThingyController')
->middleware('is_admin');
> 您不能为resource route
提供"名称",但您可以分别为resource controller
中的每个方法命名。
为此name()
函数需要 2 个参数。
- 方法名称
- 该方法路由的名称。
,
Route::resource('thingies', 'ThingyController')
->middleware('is_admin')
->name('create', 'admin.create');