带有名称的 Laravel 资源路由给出错误



我按照教程添加了中间件,检查用户在加载页面时是否是管理员。它适用于普通视图路线,例如

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 个参数。

  1. 方法名称
  2. 该方法路由的名称。

Route::resource('thingies', 'ThingyController')
->middleware('is_admin')
->name('create', 'admin.create');

相关内容

最新更新