Laravel 5:中间件之前和之后进入路线后

时间:2015-07-09 15:44:36

标签: php laravel-5 laravel-routing laravel-middleware

我有两个中间件:beforeCache& afterCache,两者都在Kernel上注册。

我想按顺序将它们称为路线: 1. beforeCache 2. myController 3. afterCache

如果我定义这样的路线:

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

beforeCache不执行,因为afterCache重新定义了相同的数组密钥中间件。

我该怎么做?谢谢!

2 个答案:

答案 0 :(得分:14)

我假设您正在使用5.1,但您正在做的事情主要是尝试在路线上定义属性数组。方括号[]只是说数组(...)的简写版本。

从文档(http://laravel.com/docs/5.1/middleware#defining-middleware)特别是前/后中间件,你只需要以某种方式返回。

对于Before中间件,您可以执行代码并在代码执行后返回下一个请求。

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

对于After middleware,您处理剩余的请求,然后执行代码并最终返回响应。

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

这条路线看起来像这样,

{{1}}

答案 1 :(得分:1)

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 - 之前的中间件运行,然后传递请求。

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