与
ESC
输入关键词搜索文章

laravel8控制器构造函数和中间件的执行顺序

全文约 239 字预计阅读 1 分钟
做一个多语言版本的网页使用一个多语言判断的中间件\App\Http\Middleware\Language::class 结果死活在控制器构造函数中跑不出结果,laravel加载执行生命周期,决定了是先跑了构造函数后才会跑中间件里的代码,无论你是写路由中间件组middlewareGroups ,还是写在路由配置里 Route::group(['middleware' => ['Language']], function () { // }); 都得不到正确的加载语言包的结果,最后发现有两个解决方法, 1、全局注册中间件,在/app/Http/Kernel.php的$middleware中配置可以先执行中间件再跑控制器构造函数中的代码,但等于所有的地方都会用到该中间件了。 2、把依赖逻辑写在构造函数中使用中间件回调中可以解决。
    public function __construct()
    {
        // $this->middleware('Language');// 想先执行这样也不行
        $this->middleware(function ($request, $next) {
 
            echo __('netpc.com.cn');

            return $next($request);  //...add

        });
    }
laravel8控制器构造函数和中间件的执行顺序
分享

发表评论

评论 0 条

暂无评论,来说点什么吧。