mirror of
https://github.com/archtechx/tenancy.git
synced 2026-03-22 00:44:03 +00:00
Simplify TenancyUrlGenerator
The `toRoute()` and `route()` overrides cover `temporarySignedRoute())`, so we don't need to specifically override `temporarySIgnedRoute()` anymore. `route()` override got simplified since everything except for the name prefixing is delegated to the lower-level `toRoute()` method.
This commit is contained in:
parent
1022dc826d
commit
52954d084b
1 changed files with 11 additions and 34 deletions
|
|
@ -105,8 +105,16 @@ class TenancyUrlGenerator extends UrlGenerator
|
||||||
public static bool $passQueryParameter = true;
|
public static bool $passQueryParameter = true;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Override the route() method so that the route name gets prefixed
|
* Override the route() method to prefix the route name before $this->routes->getByName($name) is called
|
||||||
* and the tenant parameter gets added when in tenant context.
|
* in the parent route() call.
|
||||||
|
*
|
||||||
|
* This is necessary because $this->routes->getByName($name) is called to retrieve the route
|
||||||
|
* before passing it to toRoute(). If only the prefixed route (e.g. 'tenant.foo') is registered
|
||||||
|
* and the original ('foo') isn't, route() would throw a RouteNotFoundException.
|
||||||
|
* So route() has to be overridden to prefix the passed route name, even though toRoute() is overridden already.
|
||||||
|
*
|
||||||
|
* Only the name is taken from prepareRouteInputs() here — parameter handling
|
||||||
|
* (adding tenant parameter, removing bypass parameter) is delegated to toRoute().
|
||||||
*/
|
*/
|
||||||
public function route($name, $parameters = [], $absolute = true)
|
public function route($name, $parameters = [], $absolute = true)
|
||||||
{
|
{
|
||||||
|
|
@ -114,42 +122,11 @@ class TenancyUrlGenerator extends UrlGenerator
|
||||||
throw new InvalidArgumentException('Attribute [name] expects a string backed enum.');
|
throw new InvalidArgumentException('Attribute [name] expects a string backed enum.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$wrappedParameters = Arr::wrap($parameters);
|
[$name] = $this->prepareRouteInputs($name, Arr::wrap($parameters)); // @phpstan-ignore argument.type
|
||||||
|
|
||||||
[$name, $parameters] = $this->prepareRouteInputs($name, $wrappedParameters); // @phpstan-ignore argument.type
|
|
||||||
|
|
||||||
if (isset($wrappedParameters[static::$bypassParameter])) {
|
|
||||||
// If the bypass parameter was passed, we need to add it back to the parameters after prepareRouteInputs() removes it,
|
|
||||||
// so that the underlying toRoute() call in parent::route() can bypass the behavior modification as well.
|
|
||||||
$parameters[static::$bypassParameter] = $wrappedParameters[static::$bypassParameter];
|
|
||||||
}
|
|
||||||
|
|
||||||
return parent::route($name, $parameters, $absolute);
|
return parent::route($name, $parameters, $absolute);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Override the temporarySignedRoute() method so that the route name gets prefixed
|
|
||||||
* and the tenant parameter gets added when in tenant context.
|
|
||||||
*/
|
|
||||||
public function temporarySignedRoute($name, $expiration, $parameters = [], $absolute = true)
|
|
||||||
{
|
|
||||||
if ($name instanceof BackedEnum && ! is_string($name = $name->value)) {
|
|
||||||
throw new InvalidArgumentException('Attribute [name] expects a string backed enum.');
|
|
||||||
}
|
|
||||||
|
|
||||||
$wrappedParameters = Arr::wrap($parameters);
|
|
||||||
|
|
||||||
[$name, $parameters] = $this->prepareRouteInputs($name, $wrappedParameters); // @phpstan-ignore argument.type
|
|
||||||
|
|
||||||
if (isset($wrappedParameters[static::$bypassParameter])) {
|
|
||||||
// If the bypass parameter was passed, we need to add it back to the parameters after prepareRouteInputs() removes it,
|
|
||||||
// so that the underlying route() call in parent::temporarySignedRoute() can bypass the behavior modification as well.
|
|
||||||
$parameters[static::$bypassParameter] = $wrappedParameters[static::$bypassParameter];
|
|
||||||
}
|
|
||||||
|
|
||||||
return parent::temporarySignedRoute($name, $expiration, $parameters, $absolute);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Override the toRoute() method so that the route name gets prefixed
|
* Override the toRoute() 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.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue