【问题标题】:Laravel 5.2.x disable specific middlewareLaravel 5.2.x 禁用特定中间件
【发布时间】:2016-04-20 14:44:19
【问题描述】:

是否可以在不禁用所有中间件的情况下禁用特定中间件?

我会在运行测试时使用它,所以我不想定义中间件组,然后将它们分配给我的路由。

$this->withoutMiddleware(); // <-- This will prevent all middleware 

$this->withoutMiddleware('web'); // <-- What I want is something like this 

【问题讨论】:

    标签: php laravel testing laravel-5.2 middleware


    【解决方案1】:

    我有一个替代解决方案,您可以根据您的环境在受影响的中间件中添加一个条件:

    public function handle($request, Closure $next)
    {
        if (App::environment('testing')) {
            return $next($request);
        }
    
        // Your middleware logic
    
        return $next($request);
    }
    

    【讨论】:

    • 我认为这对我来说应该是一个很好的解决方案。我希望有一种方法可以禁用具体的中间件。
    • 不知道有没有这样的功能。这可能是对 laravel repo 的智能拉取请求
    【解决方案2】:

    好吧,您可以使用middleware groups,这是一种更好的方法。定义几个组,并将它们分配给您的路线。

    【讨论】:

    • Web,问题中提到的(可能)已经是一个中间件组。尽管如此,这并没有解释如何禁用单个中间件或中间件组。
    【解决方案3】:

    您可以在中间件本身的 $except 数组中添加特定的路由。

    例如:我不希望我的 api 路由有 web 中间件,所以这就是我在 VerifyCsrfToken.php 中所做的

    protected $except = [
        "api/*",
        "more/routes",
    ];
    

    【讨论】:

      猜你喜欢
      • 2016-05-24
      • 2017-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-14
      • 2018-06-28
      • 1970-01-01
      • 2015-09-22
      相关资源
      最近更新 更多