组前缀内的路由名称不包括前缀

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

【讨论】:

以上是关于组前缀内的路由名称不包括前缀的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 路由组前缀 - 变量不起作用

没有前缀名称的 Laravel 路由

Laravel 5中带有前缀的路由组中的路由资源

如何为路由组添加前缀以及如何在刀片视图中调用子路由

Laravel如何将组前缀参数添加到路由功能

为所有从包路由导入的前缀添加前缀时,如何在 Symfony 包的模板中生成 URL?