Laravel 7 - 为什么我不能在不同的路由组中使用相同的路由?

Laravel 7 - Why i can't using the same route in different group of routing?

所以我的路线中有这段代码:

// Facilitator Priviledges
    Route::group(['roles'=>'facilitator'],function(){

        //Material
        Route::get('/material', 'MaterialController@index');
        Route::post('/material', 'MaterialController@store');
        Route::get('/material/{course:id}/create', 'MaterialController@create');
        Route::get('/material/detail/{course:id}', 'MaterialController@show');
        Route::get('/material/{material:id}/edit', 'MaterialController@edit');
        Route::patch('/material/{material:id}', 'MaterialController@update');
        Route::delete('/material/{material:id}', 'MaterialController@destroy');


    });

    //Admin Priviledges
    Route::group(['roles'=>'admin'],function(){
        Route::resource('/categories', 'CategoriesController');  

        //Material
        Route::get('/material', 'MaterialController@index');
        Route::post('/material', 'MaterialController@store');
        Route::get('/material/{course:id}/create', 'MaterialController@create');
        Route::get('/material/detail/{course:id}', 'MaterialController@show');
        Route::get('/material/{material:id}/edit', 'MaterialController@edit');
        Route::patch('/material/{material:id}', 'MaterialController@update');
        Route::delete('/material/{material:id}', 'MaterialController@destroy');
    });

它有相同的路由,在这种情况下,Material admin 和 facilitator 角色都可以访问它的路由,但是代码运行时只能一个工作正常的角色(我正在使用管理员)和另一个给出错误(503)服务不可用

你可以参考这个Question

或者可以参考Laravel Policy

或者您可以简单地创建自己的策略并将其注册到您的中间件中。

Route::group(['middleware' => ['admin', 'facilitator']], function () {
   Route::get('/material', 'MaterialController@index');
   Route::post('/material', 'MaterialController@store');
   Route::get('/material/{course:id}/create', 'MaterialController@create');
   Route::get('/material/detail/{course:id}', 'MaterialController@show');
   Route::get('/material/{material:id}/edit', 'MaterialController@edit');
   Route::patch('/material/{material:id}', 'MaterialController@update');
   Route::delete('/material/{material:id}', 'MaterialController@destroy');
});

如果你想使用组的级联能力,你可以这样嵌套它们:

Route::group(['roles'=>'admin'],function(){
    Route::resource('/categories', 'CategoriesController');  

    Route::group(['roles'=>'facilitator'],function(){
        Route::get('/material', 'MaterialController@index');
        Route::post('/material', 'MaterialController@store');
        Route::get('/material/{course:id}/create', 'MaterialController@create');
        Route::get('/material/detail/{course:id}', 'MaterialController@show');
        Route::get('/material/{material:id}/edit', 'MaterialController@edit');
        Route::patch('/material/{material:id}', 'MaterialController@update');
        Route::delete('/material/{material:id}', 'MaterialController@destroy');
    });
});

内组roles['admin', 'facilitator']