You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:17:13