【问题标题】:Add domain parameter to all subroutes automatically自动将域参数添加到所有子路由
【发布时间】:2017-04-30 21:32:51
【问题描述】:

我正在努力做到这一点,以便我可以让组内的所有路由自动使用域参数,而无需在视图中指定它等等。这是我正在寻找的示例。

路线组代码:

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') }}

然后在RouteServiceProviderboot() 方法中,有类似的东西:

public function boot()
{
    if (isset(session('my_parameter'))) {
        Route::addParameter(['tenant_domain' => session('tenant_domain')]);
    }

    parent::boot();
}

我怎样才能正确执行此操作以使其正常工作?

【问题讨论】:

  • 我会让中间件做config('tenant.domain', $request->route('tenant_domain')),然后在你想访问变量的地方使用config('tenant.domain')
  • 我该如何做,这样我就不必将tenant_domain 作为组内路由的参数包含在内?我尝试在tenant 中间件中使用$request->route()->forgetParameter('tenant_domain'),但它不起作用。
  • Ohhhhh,我现在更好地理解了这个问题。抱歉,我没有答案。

标签: php laravel


【解决方案1】:

不确定您是否自动将其绑定到路由。但是,您可以覆盖所有 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 中找到如何添加自定义助手。

【讨论】:

  • 这没关系,但我仍然必须将$tenant_domain 添加到我所有的控制器方法中......我怎样才能避免这种情况?
  • 看来解决方案是使用您的辅助函数以及forgetParameter,因此不需要将其注入控制器方法中。谢谢。
  • 啊,很酷,不知道forgetParameter。那么一个中间件要做$request->route()->forgetParameter('tenant_domain');?
猜你喜欢
  • 2021-09-04
  • 1970-01-01
  • 2016-11-28
  • 2021-12-04
  • 2020-09-13
  • 1970-01-01
  • 2021-02-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多