访问随附刀片模板中的通配符laravel子域中的参数

时间:2018-08-30 07:32:59

标签: php laravel

在我的 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参数的正确方法是什么?

1 个答案:

答案 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的变量。