php Laravel 5:路由之前和之后的中间件

cxfofazt  于 2023-04-04  发布在  PHP
关注(0)|答案(2)|浏览(129)

我有两个中间件:beforeCache和afterCache,两者都在内核上注册。
我想按以下顺序调用它们进入路由:1. beforeCache 2. myController 3. afterCache
如果我像这样定义一个路由:

Route::get('especies/{id}', [
    'middleware' => 'beforeCache', 
    'uses' => 'MyController@myMethod', 
    'middleware' => 'afterCache', 
]);

beforeCache不执行,因为afterCache正在重新定义相同的数组键中间件。
我该怎么做?谢谢!

8fsztsew

8fsztsew1#

我假设你在这里使用的是5.1,但你实际上是在路由上定义一个属性数组,方括号[]只是array(...)的简写版本。
从文档(http://laravel.com/docs/5.1/middleware#defining-middleware)中,特别是Before / After Middleware,您只需要以某种方式返回。
对于Before middlewares,您执行代码并在代码执行后返回下一个请求。

public function handle($request, Closure $next)
{
    // Perform action

    return $next($request);
}

对于After中间件,您处理请求的其余部分,然后执行代码并最终返回响应。

public function handle($request, Closure $next)
{
    $response = $next($request);
    // Perform action
    return $response;
}

路线最终会是这样的

Route::get('especies/{id}',[
    'middleware' => [
        'beforeCache',
        'afterCache'
    ],
    'uses' => 'MyController@myMethod'
]);
5ssjco0h

5ssjco0h2#

class BeforeMiddleware implements Middleware {

    public function handle($request, Closure $next)
    {
        // Do Stuff
        return $next($request);
    }

}

class AfterMiddleware implements Middleware {

    public function handle($request, Closure $next)
    {
        $response = $next($request);
        // Do stuff
        return $response;
    }

}

1-before中间件运行,然后传递请求。
2-after中间件允许处理请求,然后对其进行操作

相关问题