useTenancyUrlGenerator($tenant); } public function revert(): void { $this->app->extend('url', fn () => $this->originalUrlGenerator); } /** * Make 'url' resolve to an instance of TenancyUrlGenerator. * * @see \Illuminate\Routing\RoutingServiceProvider registerUrlGenerator() */ protected function useTenancyUrlGenerator(Tenant $tenant): void { $newGenerator = new TenancyUrlGenerator( $this->app['router']->getRoutes(), $this->originalUrlGenerator->getRequest(), $this->app['config']->get('app.asset_url'), ); $defaultParameters = $this->originalUrlGenerator->getDefaultParameters(); if (static::$addTenantParameterToDefaults) { $tenantParameterName = PathTenantResolver::tenantParameterName(); $defaultParameters = array_merge($defaultParameters, [ $tenantParameterName => PathTenantResolver::tenantParameterValue($tenant), ]); foreach (PathTenantResolver::allowedExtraModelColumns() as $column) { $defaultParameters["$tenantParameterName:$column"] = $tenant->getAttribute($column); } } $newGenerator->defaults($defaultParameters); $newGenerator->setSessionResolver(function () { return $this->app['session'] ?? null; }); $newGenerator->setKeyResolver(function () { return $this->app->make('config')->get('app.key'); }); $this->app->extend('url', fn () => $newGenerator); } }