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

做一个多语言版本的网页使用一个多语言判断的中间件\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

        });
    }
此条目发表在服务器分类目录,贴了标签。将固定链接加入收藏夹。

发表回复