Php Laravel 5:之前的中间件&;之后进入航线

Php Laravel 5:之前的中间件&;之后进入航线,php,laravel-5,laravel-routing,laravel-middleware,Php,Laravel 5,Laravel Routing,Laravel Middleware,我有两个中间件:beforeCache和afterCache,它们都注册在内核上 我想按以下顺序将它们称为路由: 1.前缓存 2.霉菌控制者 3.后置缓存 如果我定义这样的路线: Route::get('especies/{id}', [ 'middleware' => 'beforeCache', 'uses' => 'MyController@myMethod', 'middleware' => 'afterCache', ]); befor

我有两个中间件:beforeCache和afterCache,它们都注册在内核上

我想按以下顺序将它们称为路由: 1.前缓存 2.霉菌控制者 3.后置缓存

如果我定义这样的路线:

Route::get('especies/{id}', [
    'middleware' => 'beforeCache', 
    'uses' => 'MyController@myMethod', 
    'middleware' => 'afterCache', 
]);
beforeCache不执行,因为afterCache正在重新定义相同的数组密钥中间件


我该怎么做?谢谢

我假设您在这篇文章中使用的是5.1,但实际上您所做的是在路由上定义一个属性数组。括号[]只是saying array(…)的简写版本

从文档()特别是Before/After中间件中,您只需要以某种方式返回

对于中间件之前,您执行代码并在代码执行后返回下一个请求

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

    return $next($request);
}
因为在中间件之后,您将处理请求的其余部分,然后执行代码并最终返回响应

public function handle($request, Closure $next)
{
    $response = $next($request);
    // Perform action
    return $response;
}
这条路线最终会变成这样

Route::get('especies/{id}',[
    'middleware' => [
        'beforeCache',
        'afterCache'
    ],
    'uses' => 'MyController@myMethod'
]);
1-中间件在运行之前,然后传递请求

2-before中间件允许处理请求,然后对其进行操作

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

}