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