我的laravel项目中有一个像这样的通配符子域定义:
Route::group(['domain' => '{website}.' . config('app.url')], function () {
Route::get('/', ['as' => 'wb-homepage', 'uses' => 'WebsiteController@homePage']);
Route::get('/AdsAll', ['uses' => 'WebsiteController@AdsAll']);
});
在该路由组下定义的所有路由都包含一个header.blade.php
,我想访问{website}参数的值,该参数被定义为子域。
我认为可以访问该参数的方法之一是boot ()
的AppServiceProvider.php
。我尝试了不同的方法,但根据this question我不能使用它因为:
在解析请求并且请求参数已知之前,将调用任何服务提供者的boot()和register()方法,这就是您无法访问它们的原因
现在我的问题是,在包含的刀片模板中访问website
参数的正确方法是什么?
一种方法是使用middleware全球中间件,share数据与您的所有视图。
首先,要创建中间件,您可以运行:
php artisan make:middleware ShareSiteSubdomain
然后在ShareSiteSubdomain
添加:
public function handle($request, Closure $next)
{
view()->share('website', $request->route('website'));
return $next($request);
}
最后,转到你的app/Http/Kernel.php
并将\App\Http\Middleware\ShareSiteSubdomain::class
添加到web
数组中的$middlewareGroups
数组。
那么你应该在你的所有视图中都有一个名为$website
的变量。