mirror of
https://github.com/archtechx/tenancy.git
synced 2025-12-12 22:34:03 +00:00
[4.x] URL generation, request data identification improvements (#1357)
* UrlGenerator: set defaults based on config; request data: move config to config file+resolver * Claude code adjustments * improve request data tests, simplify complex test in UrlGeneratorBootstrapperTest * url generator test: test changing tenant parameter name * request data identification: add tenant_model_column configuration * defaultParameterNames -> passQueryParameter * move comment * minor refactor in PathIdentificationTest, expand CLAUDE.md to include early identification section * Fix COLOR_FLAG * improve test name Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * TenancyUrlGenerator: add a check for queryParameterName being null Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Fix code style (php-cs-fixer) --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
This commit is contained in:
parent
f4cc99b317
commit
5f7fd38e5a
13 changed files with 440 additions and 126 deletions
|
|
@ -9,6 +9,7 @@ use Illuminate\Routing\UrlGenerator;
|
|||
use Illuminate\Support\Arr;
|
||||
use InvalidArgumentException;
|
||||
use Stancl\Tenancy\Resolvers\PathTenantResolver;
|
||||
use Stancl\Tenancy\Resolvers\RequestDataTenantResolver;
|
||||
|
||||
/**
|
||||
* This class is used in place of the default UrlGenerator when UrlGeneratorBootstrapper is enabled.
|
||||
|
|
@ -86,12 +87,22 @@ class TenancyUrlGenerator extends UrlGenerator
|
|||
public static array $overrides = [];
|
||||
|
||||
/**
|
||||
* Use default parameter names ('tenant' name and tenant key value) instead of the parameter name
|
||||
* and column name configured in the path resolver config.
|
||||
* Follow the query_parameter config instead of the tenant_parameter_name (path identification) config.
|
||||
*
|
||||
* You want to enable this when using query string identification while having customized that config.
|
||||
* This only has an effect when:
|
||||
* - $passTenantParameterToRoutes is enabled, and
|
||||
* - the tenant_parameter_name config for the path resolver differs from the query_parameter config for the request data resolver.
|
||||
*
|
||||
* In such a case, instead of adding ['tenant' => '...'] to the route parameters (or whatever your tenant_parameter_name is if not 'tenant'),
|
||||
* the query_parameter will be passed instead, e.g. ['team' => '...'] if your query_parameter config is 'team'.
|
||||
*
|
||||
* This is enabled by default because typically you will not need $passTenantParameterToRoutes with path identification.
|
||||
* UrlGeneratorBootstrapper::$addTenantParameterToDefaults is recommended instead when using path identification.
|
||||
*
|
||||
* On the other hand, when using request data identification (specifically query string) you WILL need to pass the parameter
|
||||
* directly to route() calls, therefore you would use $passTenantParameterToRoutes to avoid having to do that manually.
|
||||
*/
|
||||
public static bool $defaultParameterNames = false;
|
||||
public static bool $passQueryParameter = true;
|
||||
|
||||
/**
|
||||
* Override the route() method so that the route name gets prefixed
|
||||
|
|
@ -175,11 +186,14 @@ class TenancyUrlGenerator extends UrlGenerator
|
|||
protected function addTenantParameter(array $parameters): array
|
||||
{
|
||||
if (tenant() && static::$passTenantParameterToRoutes) {
|
||||
if (static::$defaultParameterNames) {
|
||||
return array_merge($parameters, ['tenant' => tenant()->getTenantKey()]);
|
||||
} else {
|
||||
return array_merge($parameters, [PathTenantResolver::tenantParameterName() => PathTenantResolver::tenantParameterValue(tenant())]);
|
||||
if (static::$passQueryParameter) {
|
||||
$queryParameterName = RequestDataTenantResolver::queryParameterName();
|
||||
if ($queryParameterName !== null) {
|
||||
return array_merge($parameters, [$queryParameterName => RequestDataTenantResolver::payloadValue(tenant())]);
|
||||
}
|
||||
}
|
||||
|
||||
return array_merge($parameters, [PathTenantResolver::tenantParameterName() => PathTenantResolver::tenantParameterValue(tenant())]);
|
||||
} else {
|
||||
return $parameters;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue