Laravel 5:在路由中使用中间件的before和after

15

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

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

如果我定义如下路由:

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

由于afterCache正在重新定义相同的数组键middleware,因此beforeCache不会执行。

我该怎么做?谢谢!

2个回答

35

我假设您正在使用5.1版本,但您所做的实质上是尝试在路由上定义属性数组。方括号[]只是说array(...)的简写版本。

从文档(http://laravel.com/docs/5.1/middleware#defining-middleware)中特别是Before / After Middleware,您只需要返回一定的方式即可。

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

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

1
这太棒了,投票支持。你救了我的一天,伙计。 - Viet Nguyen

9
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-后置中间件允许请求被处理,然后对其进行操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接