避免/删除Laravel> = 5.2.31的路由中的Web中间件

时间:2016-05-24 15:14:34

标签: php laravel

在Laravel 5.2.31及更高版本的changes之后,app/Http/routes.php中的所有路由都属于Web中间件组。

RouteServiceProvider.php

protected function mapWebRoutes(Router $router)
{
    $router->group([
        'namespace' => $this->namespace, 'middleware' => 'web',
    ], function ($router) {
        require app_path('Http/routes.php');
    });
}

问题:

  1. 在没有web中间件的情况下定义路由集的最简单/最佳方法是什么?
  2. 其中一个用例是,声明无状态api的路由没有会话中间件属于Web组中间件

1 个答案:

答案 0 :(得分:7)

我解决这个问题的一种方法是编辑app/Providers/RouteServiceProvider.php并为其他组中间件提供另一个路径文件,即api

public function map(Router $router)
{
    $this->mapWebRoutes($router);
    $this->mapApiRoutes($router);

    //
}

protected function mapWebRoutes(Router $router)
{
    $router->group([
        'namespace' => $this->namespace, 'middleware' => 'web',
    ], function ($router) {
        require app_path('Http/routes.php');
    });
}

// Add this method and call it in map method. 
protected function mapApiRoutes(Router $router)
{
    $router->group([
        'namespace' => $this->namespace, 'middleware' => 'api',
    ], function ($router) {
        require app_path('Http/routes-api.php');
    });
}

要验证结果,请在终端上运行php artisan route:list并检查路由中间件。

例如

Now I have some route without web middleware which is defined in different file which later called in RouteServiceProvider

现在我有一些没有Web中间件的路由,这些中间件在不同的文件中定义,稍后在RouteServiceProvider中调用

如果您更喜欢旧功能,可以使用以下内容:

public function map(Router $router)
{
    $this->mapWebRoutes($router);
    $this->mapGeneralRoutes($router);
}

protected function mapGeneralRoutes(Router $router)
{
    $router->group(['namespace' => $this->namespace], function ($router) {
        require app_path('Http/routes-general.php');
    });
}

然后,在routes-general.php中,您可以像以前一样为不同的路由集创建多个中间件组