Laravel 中间件和服务提供商流程
Laravel Middleware & Service Provider flow
我有一个 Laravel 5.4 应用程序,我在其中根据根域在中间件中设置应用程序的区域设置,因为我对每种语言都有一个域。这是因为 SEO 和 Adwords 的问题,我无法更改。
其次,我有一个 ViewComposerServiceProvider,我在其中为布局视图准备数据。这个数据依赖于Language,但是还没有设置语言,因为先执行了ServiceProvider。
我该怎么办?
如果当前工作流程无效,您应该更改它。
可能您应该将选择语言移动到提供程序(相同或其他)中,以便在 ViewComposerServiceProvider 中设置语言
我解决了这个问题,我制作了一个 GlobalVarServiceProvider 来获取语言并在请求中提供它
$lang = Cache::rememberForever("aGreatKey", function () use ($stripped_domain) {
return Lang::where('domain', $stripped_domain)->first();
});
$request->attributes->add(['language' => $lang]);
然后我可以在 ViewComposerServiceProvider(以及其他任何地方)中获取它
$this->sprache = $request->attributes->get('sprache');
重要的是,GlobalVarServiceProvider 在 ViewComposerServiceProvider 之前被调用。
我有一个 Laravel 5.4 应用程序,我在其中根据根域在中间件中设置应用程序的区域设置,因为我对每种语言都有一个域。这是因为 SEO 和 Adwords 的问题,我无法更改。
其次,我有一个 ViewComposerServiceProvider,我在其中为布局视图准备数据。这个数据依赖于Language,但是还没有设置语言,因为先执行了ServiceProvider。
我该怎么办?
如果当前工作流程无效,您应该更改它。
可能您应该将选择语言移动到提供程序(相同或其他)中,以便在 ViewComposerServiceProvider 中设置语言
我解决了这个问题,我制作了一个 GlobalVarServiceProvider 来获取语言并在请求中提供它
$lang = Cache::rememberForever("aGreatKey", function () use ($stripped_domain) {
return Lang::where('domain', $stripped_domain)->first();
});
$request->attributes->add(['language' => $lang]);
然后我可以在 ViewComposerServiceProvider(以及其他任何地方)中获取它
$this->sprache = $request->attributes->get('sprache');
重要的是,GlobalVarServiceProvider 在 ViewComposerServiceProvider 之前被调用。