运行条件的中间件 - Laravel(Run a middleware on condition

2019-11-05 06:13发布

我有检查在请求特定的报头参数并发送回基于该响应的中间件。

但我的问题是,我不希望这种中间件总是在我的控制器的功能运行。 我想中间件上运行。如果条件的功能得到真正的(例如:存储功能)。

我怎样才能做到这一点?

Answer 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);
}


文章来源: Run a middleware on condition - Laravel