在我的 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
参数的正确方法是什么?
答案 0 :(得分:1)
一种方法是为此使用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
的变量。