首页 文章

为什么不在Laravel中工作组中间件?

提问于
浏览
1

我在路由Laravel时使用以下中间件:

Route::group(['middleware' => 'web'], function () {

    Route::resource('Order', 'OrderController');
});

当我尝试在URL中调用此路径时:

http://localhost/web/order

我收到一个错误:

抱歉,找不到您要查找的页面 . 在RouterCollection.php第161行的RouteCollection-> match(对象(请求))中的Router.php第821行在Router-> findRoute(对象(请求))在Router.php第691行的Router-> dispatchToRoute(对象(请求)) )在Router_> dispatch(对象(请求))的Router.php第675行中的Kernel.php第246行,在Kernel-> Illuminate \ Foundation \ Http (对象(请求))at call_user_func(object(Closure),对象(请求))在Pipeline-> Illuminate \ Routing中的Pipeline.php第52行,在CheckForMaintenanceMode.php第44行,CheckForMaintenanceMode-> handle(对象(请求),对象(关闭))处的路由(对象(请求))在Pipeline-> Illuminate \ Pipeline (object(Request))的Pipeline.php第136行中的call_user_func_array(array(object(CheckForMaintenanceMode),'handle'),array(object(Request),object(Closure)))在Pipeline中的Pipeline.php第32行中的call_user_func(object(Closure),object(Request))在管道中的call_user_func(object(Closure),object(Request))的Pipeline-> Illuminate \ Routing (object(Request))中 . php第10行2在Pipeline-> then(object(Closure))在Kernel.php第132行的Kernel-> sendRequestThroughRouter(object(Request))在Kernel.php第99行的Kernel-> handle(object(Request))中的index.php第53行

2 回答

  • 4

    Route::group(); ,正如其名称所示,用于分组共享某些共同点的路线 .

    'middleware' => 'web' 将使所有路由共享同一组中间件或共享相同的中间件 . 看看 app/Http/Kernel.php .

    中间件不会影响您的路线网址,但会在您的应用中如何处理路线 .

    'prefix' => 'web' 将使您的所有路由共享相同的路径 . 这更符合您的需求 .

    正确的代码是:

    Route::group(['prefix' => 'web'], function () {
        Route::resource('Order', 'OrderController');
    });
    

    访问此路由的URL将是:

    /web/order

    要同时使用前缀 web 和中间件 auth 与guard api auth:api ,代码将为:

    Route::group(['prefix' => 'web', 'middleware' => ['auth:api']], function () {
        Route::resource('Order', 'OrderController');
    });
    
  • 1

    如果您要在帖子中查找网址,则应该使用 'prefix' => 'web' 而不是 'middleware' => 'web' . 默认情况下,Laravel 5.2包装'web'中间件中的所有路由,不必再次声明它 .

    我无法清楚地解释什么是中间件,除了它根据规则保护某些路由 . Laravel documentation on route prefixes

相关问题