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

Posted

技术标签:

【中文标题】Laravel 5:路由之前和之后的中间件【英文标题】:Laravel 5: Middleware before & after into routes 【发布时间】:2015-09-28 02:43:19 【问题描述】:

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

我想按以下顺序将它们调用到路由中: 1. 缓存前 2.我的控制器 3.缓存后

如果我这样定义路线:

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

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

我该怎么做?谢谢!

【问题讨论】:

【参考方案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-before中间件操作,然后传递请求。

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

【讨论】:

【参考方案2】:

我假设您在此使用 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'
]);

【讨论】:

这太棒了,投票。你拯救了我的一天,伙计。

以上是关于Laravel 5:路由之前和之后的中间件的主要内容,如果未能解决你的问题,请参考以下文章

带有角度路由的 Laravel 5 中间件

Laravel 5路由的多个中间件不起作用

关于laravel5.5路由的一些问题,持续更新

在 Laravel 5.3 的中间件中访问路由 URL 参数

Laravel 5 中间件路由群组子域名路由

laravel 5.2 中特定路由的 web 中间件