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

问题描述 投票:0回答:1

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

php laravel
1个回答
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的变量。

© www.soinside.com 2019 - 2024. All rights reserved.