1
0
Fork 0
mirror of https://github.com/archtechx/tenancy.git synced 2026-02-04 22:34:05 +00:00

Add $override functionality to TenancyUrlGenerator

This commit is contained in:
lukinovec 2025-02-11 12:10:20 +01:00
parent ebff40e891
commit ff68edfe5d

View file

@ -37,8 +37,10 @@ class TenancyUrlGenerator extends UrlGenerator
* - route('home', [$bypassParameter => true]) => app.test/ * - route('home', [$bypassParameter => true]) => app.test/
* - route('tenant.home', [$bypassParameter => true]) => app.test/tenant -- query string identification (no query string passed) * - route('tenant.home', [$bypassParameter => true]) => app.test/tenant -- query string identification (no query string passed)
* *
* With path identification, the tenant parameter is passed automatically by URL::defaults(), so in that case, * With path identification, it is recommended to pass the tenant parameter automatically by setting
* this only affects the automatic route name prefixing. * UrlGeneratorBootstrapper::$addTenantParameterToDefaults to true.
* In that case, this class should only affect the automatic route name prefixing,
* and the forceful route name overrides set in the $override property.
* *
* @see UrlGeneratorBootstrapper * @see UrlGeneratorBootstrapper
*/ */
@ -65,6 +67,21 @@ class TenancyUrlGenerator extends UrlGenerator
*/ */
public static bool $passTenantParameterToRoutes = false; public static bool $passTenantParameterToRoutes = false;
/**
* Route names that should always be overridden.
* This behavior can still be bypassed by passing the bypass parameter.
*
* For example, Jetstream integration:
* [
* 'profile.show' => 'tenant.profile.show',
* 'two-factor.login' => 'tenant.two-factor.login',
* ]
*
* `route('profile.show')` will return an URL as if you called `route('tenant.profile.show')`.
* `route('profile.show', ['central' => true])` will return an URL as if you called `route('profile.show')`.
*/
public static array $override = [];
/** /**
* Override the route() method so that the route name gets prefixed * Override the route() method so that the route name gets prefixed
* and the tenant parameter gets added when in tenant context. * and the tenant parameter gets added when in tenant context.
@ -117,7 +134,7 @@ class TenancyUrlGenerator extends UrlGenerator
protected function prepareRouteInputs(string $name, array $parameters): array protected function prepareRouteInputs(string $name, array $parameters): array
{ {
if (! $this->routeBehaviorModificationBypassed($parameters)) { if (! $this->routeBehaviorModificationBypassed($parameters)) {
$name = $this->prefixRouteName($name); $name = $this->routeNameOverride($name) ?: $this->prefixRouteName($name);
$parameters = $this->addTenantParameter($parameters); $parameters = $this->addTenantParameter($parameters);
} }
@ -148,4 +165,8 @@ class TenancyUrlGenerator extends UrlGenerator
{ {
return tenant() && static::$passTenantParameterToRoutes ? array_merge($parameters, [PathTenantResolver::tenantParameterName() => tenant()->getTenantKey()]) : $parameters; return tenant() && static::$passTenantParameterToRoutes ? array_merge($parameters, [PathTenantResolver::tenantParameterName() => tenant()->getTenantKey()]) : $parameters;
} }
protected function routeNameOverride(string $name) {
return static::$override[$name] ?? false;
}
} }