Laravel 5.0中App::before()的使用及迁移后中间件集成问题
解决Laravel 5.0中中间件集成到路由的问题
首先要明确:Laravel 5.0 已经摒弃了 Laravel 4.2 里 App::before() 这种全局前置回调的写法,转而使用中间件注册+调用的模式,不用再在 RouteServiceProvider.php 里写 App::before() 啦。下面一步步来帮你搞定:
1. 先在 Kernel 中注册你的中间件
打开 app/Http/Kernel.php,里面有两个关键数组:
$middleware:全局中间件,所有请求都会触发,相当于 4.2 的App::before()$routeMiddleware:命名中间件,需要手动指定给路由/路由组才会生效
方式一:注册为全局中间件
如果你的 BeforeMiddleware 是要在每个请求前执行,直接把它加到 $middleware 数组里:
protected $middleware = [ // 其他默认中间件... \App\Http\Middleware\BeforeMiddleware::class, ];
方式二:注册为命名中间件
如果只想给特定路由/路由组用,就加到 $routeMiddleware 数组,起个简短的别名:
protected $routeMiddleware = [ // 其他默认命名中间件... 'before.custom' => \App\Http\Middleware\BeforeMiddleware::class, ];
2. 在 RouteServiceProvider 中使用中间件
如果要在 RouteServiceProvider 里给路由组应用中间件,不用再写 App::before(),直接在路由定义时通过 middleware() 方法指定:
比如,给某个路由组应用命名中间件:
public function map() { $this->mapWebRoutes(); // 或者自定义路由组 Route::group([ 'namespace' => $this->namespace, 'middleware' => 'before.custom', // 这里用你刚才起的别名 ], function ($router) { require base_path('routes/web.php'); }); }
如果是全局中间件,注册后就自动生效,不需要在路由里额外指定了。
3. 验证你的中间件
可以在 BeforeMiddleware 的 handle 方法里加个调试逻辑,测试是否生效:
public function handle($request, Closure $next) { // 比如打印调试信息 dd('BeforeMiddleware 生效啦!'); return $next($request); }
这样访问任意路由,就能看到这个输出,说明中间件已经正常工作了。
内容的提问来源于stack exchange,提问作者Luis Osuna
相关产品推荐
相关产品推荐

