Warm tip: This article is reproduced from serverfault.com, please click

php-有条件地运行中间件

(php - Run a middleware on condition)

发布于 2018-10-11 07:10:57

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

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

我怎样才能做到这一点?

Questioner
Saman Sattari
Viewed
11
common sense 2018-11-16 01:00:12

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

通过请求

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

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');

中间件

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