【问题标题】:Run a middleware on condition - Laravel在条件下运行中间件 - Laravel
【发布时间】:2019-03-16 04:40:31
【问题描述】:

我有一个中间件,用于检查请求中的特定标头参数并根据该参数发回响应。

但我遇到的问题是我不希望这个中间件总是在我的控制器中的一个函数上运行。如果函数中的条件为真(例如:存储函数),我希望该中间件运行。

我怎样才能做到这一点?

【问题讨论】:

    标签: php laravel laravel-5 conditional middleware


    【解决方案1】:

    在执行控制器操作之前调用中间件。所以不可能根据动作中的条件来执行中间件。但是,可以有条件地执行中间件:

    通过请求

    您可以将条件添加到请求对象(隐藏字段或类似字段)

    public function handle($request, Closure $next)
    {
        // Check if the condition is present and set to true
        if ($request->has('condition') && $request->condition == true)) {
            //
        }
    
        // if not, call the next middleware
        return $next($request);
    }
    

    通过参数

    要将参数传递给中间件,您必须在路由定义中进行设置。定义路由并将带有条件值(在本例中为布尔值)的: 附加到中间件的名称。

    路由/web.php

    Route::post('route', function () {
    //
    })->middleware('FooMiddleware:true');
    

    FooMiddleware

    public function handle($request, Closure $next, $condition)
    {
        // Check if the condition is present and set to true
        if ($condition == true)) {
            //
        }
    
        // if not, call the next middleware
        return $next($request);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-01
      • 2022-07-23
      • 2018-03-28
      • 2019-06-22
      • 1970-01-01
      • 1970-01-01
      • 2021-11-15
      相关资源
      最近更新 更多