mirror of
https://github.com/archtechx/tenancy.git
synced 2026-09-20 13:34:04 +00:00
Extract normalization into a separate method
In the method, also deduplicate the separators. The only exception to this are Windows UNC paths, where the leading separators are intentionally '\\'. Also, simplify tenantScopedPath() a bit. after + prepend can be replaced by just replaceFirst, and while returning in the second branch of the method, we don't need rtrim anymore (normalizePath() itself rtrims).
This commit is contained in:
parent
0461697e6d
commit
189c2b7436
1 changed files with 19 additions and 6 deletions
|
|
@ -238,22 +238,35 @@ class FilesystemTenancyBootstrapper implements TenancyBootstrapper
|
||||||
*/
|
*/
|
||||||
protected function tenantScopedPath(string $configuredPath, string $suffix): string
|
protected function tenantScopedPath(string $configuredPath, string $suffix): string
|
||||||
{
|
{
|
||||||
// Normalize the paths to use the separator of the current OS.
|
$configuredPath = $this->normalizePath($configuredPath);
|
||||||
$configuredPath = str_replace('/', DIRECTORY_SEPARATOR, $configuredPath);
|
$storagePath = $this->normalizePath($this->originalStoragePath);
|
||||||
$storagePath = str_replace('/', DIRECTORY_SEPARATOR, $this->originalStoragePath);
|
|
||||||
|
|
||||||
if (str_starts_with($configuredPath, $storagePath . DIRECTORY_SEPARATOR)) {
|
if (str_starts_with($configuredPath, $storagePath . DIRECTORY_SEPARATOR)) {
|
||||||
// Swap the central storage path prefix for the tenant's.
|
// Swap the central storage path prefix for the tenant's.
|
||||||
// For example, storage_path('framework/cache/data') becomes storage_path('tenant1/framework/cache/data').
|
// For example, storage_path('framework/cache/data') becomes storage_path('tenant1/framework/cache/data').
|
||||||
return str($configuredPath)
|
return str($configuredPath)
|
||||||
->after($storagePath . DIRECTORY_SEPARATOR)
|
->replaceFirst($storagePath, $this->tenantStoragePath($suffix))
|
||||||
->prepend($this->tenantStoragePath($suffix) . DIRECTORY_SEPARATOR)
|
|
||||||
->toString();
|
->toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Otherwise $configuredPath isn't necessarily storage_path()-based, so just append the
|
// Otherwise $configuredPath isn't necessarily storage_path()-based, so just append the
|
||||||
// suffix as a subdirectory, e.g. '/var/cache/foo' becomes '/var/cache/foo/tenant1'.
|
// suffix as a subdirectory, e.g. '/var/cache/foo' becomes '/var/cache/foo/tenant1'.
|
||||||
return rtrim($configuredPath, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $suffix;
|
return $configuredPath . DIRECTORY_SEPARATOR . $suffix;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Normalize the path to use the separator of the current OS, deduplicated. */
|
||||||
|
protected function normalizePath(string $path): string
|
||||||
|
{
|
||||||
|
$path = str_replace('/', DIRECTORY_SEPARATOR, $path);
|
||||||
|
|
||||||
|
// On Windows, a path starting with two separators is a UNC path (e.g. '\\server\share'),
|
||||||
|
// so the leading separator that got collapsed by deduplicate() should be added back.
|
||||||
|
$uncPrefix = DIRECTORY_SEPARATOR === '\\' && str_starts_with($path, '\\\\') ? DIRECTORY_SEPARATOR : '';
|
||||||
|
|
||||||
|
return $uncPrefix . str($path)
|
||||||
|
->deduplicate(DIRECTORY_SEPARATOR)
|
||||||
|
->rtrim(DIRECTORY_SEPARATOR)
|
||||||
|
->toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function scopeSessions(string|false $suffix): void
|
public function scopeSessions(string|false $suffix): void
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue