14

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

我想按以下顺序将它们调用到路由中:1. beforeCache 2. myController 3. afterCache

如果我定义这样的路线:

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

beforeCache 不会执行,因为 afterCache 正在重新定义相同的数组键中间件。

我该怎么做?谢谢!

4

2 回答 2

28

我假设您在此使用 5.1,但您所做的实际上是尝试在路线上定义一组属性。方括号 [] 只是数组 (...) 的简写形式。

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

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

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'
]);
于 2015-07-09T15:59:08.603 回答
7
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-after中间件允许请求被处理,然后对其进行操作

于 2017-06-16T17:22:04.323 回答