组前缀内的路由名称不包括前缀
Posted
技术标签:
【中文标题】组前缀内的路由名称不包括前缀【英文标题】:route names inside a group prefix does not include the prefix 【发布时间】:2020-06-24 19:29:25 【问题描述】:我有这些路线:
Route::group(['middleware' => ['role:admin'], 'prefix' => 'admin'], function()
Route::resource(__('route.events'), 'Auth\RoleAdmin\EventController');
);
Route::group(['middleware' => ['role:user'], 'prefix' => 'user'], function()
Route::resource(__('route.events'), 'Auth\RoleUser\EventController');
);
我希望资源路由的名称分别以admin.
和user.
开头,但它不会发生。
这是php artisan route:list
命令的结果:
| | GET|HEAD | auth/admin/events | events.index | App\Http\Controllers\Auth\RoleAdmin\EventController@index | web,auth,role
:admin,guest,role:admin|user |
| | POST | auth/admin/events | events.store | App\Http\Controllers\Auth\RoleAdmin\EventController@store | web,auth,role
:admin,guest,role:admin|user |
| | GET|HEAD | auth/admin/events/create | events.create | App\Http\Controllers\Auth\RoleAdmin\EventController@create | web,auth,role
:admin,guest,role:admin|user |
| | DELETE | auth/admin/events/events | events.destroy | App\Http\Controllers\Auth\RoleAdmin\EventController@destroy | web,auth,role
:admin,guest,role:admin|user |
| | GET|HEAD | auth/admin/events/events | events.show | App\Http\Controllers\Auth\RoleAdmin\EventController@show | web,auth,role
:admin,guest,role:admin|user |
| | PUT|PATCH | auth/admin/events/events | events.update | App\Http\Controllers\Auth\RoleAdmin\EventController@update | web,auth,role
:admin,guest,role:admin|user |
| | GET|HEAD | auth/admin/events/events/edit | events.edit | App\Http\Controllers\Auth\RoleAdmin\EventController@edit | web,auth,role
:admin,guest,role:admin|user |
如你所见,admin的路由和users的路由同名,并且名称不包含前缀。
【问题讨论】:
"我希望资源路由的名称分别以 admin. 和 user. 开头"prefix()
是 URL 的前缀,而不是路由的名称
【参考方案1】:
将您的路由更改为在组外具有前缀和中间件:
Route::prefix('admin')
->middleware('role:admin')
->group(function()
Route::resource(__('route.events'), 'Auth\RoleAdmin\EventController');
);
Route::prefix('user')
->middleware('role:user')
->group(function()
Route::resource(__('route.events'), 'Auth\RoleUser\EventController');
);
https://laravel.com/docs/6.x/routing#route-groups
【讨论】:
@TimLewis:修复了错误的prefix->('user')
,谢谢
看来我得到了相同的结果。我收到错误“未定义路由 admin.events.update”
正如我在对您的问题的评论中所说:“prefix() 是 URL 的前缀,而不是路由的名称”
我以为是 laravel 自动完成的【参考方案2】:
kerbholz 的解决方案不起作用,但它帮助我解决了。
Route::prefix('admin')
->middleware('role:admin')
->name('admin.') // <-- I had to add this line in order to work
->group(function()
Route::resource(__('route.events'), 'Auth\RoleAdmin\EventController');
);
【讨论】:
以上是关于组前缀内的路由名称不包括前缀的主要内容,如果未能解决你的问题,请参考以下文章