自动将域参数添加到所有子路由

时间:2017-04-30 21:32:52

标签: php laravel

我正在尝试这样做,以便我可以让一个组内的所有路由自动使用域参数,而不必在视图和诸如此类中指定它。这是我正在寻找的一个例子。

路由组代码:

Route::group(['domain' => '{tenant_domain}.myapp.com', 'middleware' => 'tenant'], function () {

tenant中间件句柄:

public function handle($request, $next)
{
    session(['tenant_domain' => $request->route('tenant_domain')]);

    return $next($request);
}

因此,不必在我的所有视图中使用此代码:

{{ route('login', ['tenant_domain' => session('tenant_domain')]) }}

我只想使用:

{{ route('login') }}

然后在boot()的{​​{1}}方法中,有类似的内容:

RouteServiceProvider

我该怎么做才能正常运作?

1 个答案:

答案 0 :(得分:0)

不确定是否自动将其绑定到路线。但是,您可以覆盖所有Laravel助手,因为在定义之前检查它们是否存在:

if (! function_exists('route')) { //etc }}

所以你可以重写路由功能(最初位于Illuminate/Foundation/helpers.php中,如下所示:

/**
* Generate the URL to a named route.
*
* @param  string  $name
* @param  array   $parameters
* @param  bool    $absolute
* @return string
*/
function route($name, $parameters = [], $absolute = true)
{
    if (session()->has('tenant_domain'))) {
        $parameters = array_prepend($parameters, session()->get('tenant_domain'));
    }
    return app('url')->route($name, $parameters, $absolute);
} 

您可以在this thread中找到如何添加自定义帮助程序。