laravel - 具有相同URL和不同中间件和差异控制器的路由互相覆盖

问题描述 投票:-2回答:1

所以我在全球路线组中定义了我的路线,在里面我有两个其他组,中间件'employee'和一个中间件'admin',每个都有自己的控制器。

这两个组的路由索引具有相同的URL“/ document”,但每个都执行不同的控制器。

我的问题是最后定义的组总是覆盖前一个的索引路由。

想要的行为是,如果员工中间件有效,则执行empController @ index操作,否则如果管理员控制器有效,则执行adminController @ index操作,同时保持两者的相同URL,并且我必须将每个路由保持在单独的组中,这两条路线必须具有相同的网址。

我怎样才能实现这一目标?谢谢

这是两条相互矛盾的路线

Route::group(['as' => 'admin.', 'middleware' => ['admin']], function() { Route::get('/document', 'Admin\DocumentController@index')->name('document.index'); .... });
Route::group(['middleware' => ['employee']], function() { Route::get('/document', 'DocumentController@index')->name('document.index'); .... });
php laravel authentication routing middleware
1个回答
2
投票

听起来您希望根据请求是来自员工还是来自管理员来执行不同的操作。我的建议是为此设置一个url,一个路由和一个控制器功能。

在控制器功能(或中间件,如果你想这样做将其发现附加到请求中),有逻辑来调用一个或另一个方法。

PersonController.php中的一个伪示例:

if(\Auth::user()->isAdmin()) {
    // return an admin view or perform an admin function
else {
    // return an employee view or perform an employee function
}

isAdmin()函数是你在User.php这样的模型中定义的。

© www.soinside.com 2019 - 2024. All rights reserved.