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



所以我在一个全局路由组中定义了我的路由,在里面我还有另外两个组,一个是中间件"员工",一个是中间件"admin",每个组都有自己的控制器。

这两个组有一个具有相同url "/document"的路由索引,但每个组执行不同的控制器。

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

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

我怎样才能做到这一点?谢谢

这是两条相互冲突的路线

Route::group(['as' => 'admin.', 'middleware' => ['admin']], function() { Route::get('/document', 'AdminDocumentController@index')->name('document.index'); .... });
Route::group(['middleware' => ['employee']], function() { Route::get('/document', 'DocumentController@index')->name('document.index'); .... });

听起来您希望根据请求是来自员工还是管理员来执行不同的操作。我的建议是为此提供一个 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等模型中定义的内容。

最新更新