mirror of
https://github.com/archtechx/tenancy.git
synced 2025-12-13 02:04:03 +00:00
Filesystem logic refactor, improved defaults for cache tenancy (#42)
* refactor FilesystemTenancyBootstrapper * clean up tests and improve coverage * minor maintenance mode changes * Improve tenants:migrate --skip-failing logic * make tenants:migrate output consistently formatted * minor RootUrlBootstrapper + misc changes * cache bootstrapper-related improvements * Fix code style (php-cs-fixer) * misc refactor * Fix code style (php-cs-fixer) * add %original_storage_path% to fs bootstrapper, improve default config for cache * rename method * inject concrete implementations where needed instead of abstracts * Fix code style (php-cs-fixer) * refactor DealsWithTenantSymlinks * remove obsolete phpstan ignore --------- Co-authored-by: PHP CS Fixer <phpcsfixer@example.com>
This commit is contained in:
parent
4b6fa22aa7
commit
a41ad69023
23 changed files with 234 additions and 160 deletions
|
|
@ -4,7 +4,7 @@ declare(strict_types=1);
|
|||
|
||||
namespace Stancl\Tenancy\Concerns;
|
||||
|
||||
use Illuminate\Support\Collection;
|
||||
use Exception;
|
||||
use Stancl\Tenancy\Contracts\Tenant;
|
||||
|
||||
trait DealsWithTenantSymlinks
|
||||
|
|
@ -13,31 +13,44 @@ trait DealsWithTenantSymlinks
|
|||
* Get all possible tenant symlinks, existing or not (array of ['public path' => 'storage path']).
|
||||
*
|
||||
* Tenants can have a symlink for each disk registered in the tenancy.filesystem.url_override config.
|
||||
*
|
||||
* This is used for creating all possible tenant symlinks and removing all existing tenant symlinks.
|
||||
* The same storage path can be symlinked to multiple public paths, which is why the public path
|
||||
* is the Collection key.
|
||||
*
|
||||
* @return Collection<string, string>
|
||||
* @return array<string, string>
|
||||
*/
|
||||
protected function possibleTenantSymlinks(Tenant $tenant): Collection
|
||||
protected function possibleTenantSymlinks(Tenant $tenant): array
|
||||
{
|
||||
$diskUrls = config('tenancy.filesystem.url_override');
|
||||
$disks = config('tenancy.filesystem.root_override');
|
||||
$suffixBase = config('tenancy.filesystem.suffix_base');
|
||||
$disks = config('filesystems.disks');
|
||||
$urlOverrides = config('tenancy.filesystem.url_override');
|
||||
$rootOverrides = config('tenancy.filesystem.root_override');
|
||||
|
||||
$tenantKey = $tenant->getTenantKey();
|
||||
$tenantStoragePath = tenancy()->run($tenant, fn () => storage_path());
|
||||
|
||||
/** @var Collection<array<string, string>> $symlinks */
|
||||
$symlinks = collect([]);
|
||||
/** @var array<string, string> $symlinks */
|
||||
$symlinks = [];
|
||||
|
||||
foreach ($urlOverrides as $disk => $publicPath) {
|
||||
if (! isset($disks[$disk])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (! isset($rootOverrides[$disk])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($disks[$disk]['driver'] !== 'local') {
|
||||
throw new Exception("Disk $disk is not a local disk. Only local disks can be symlinked.");
|
||||
}
|
||||
|
||||
foreach ($diskUrls as $disk => $publicPath) {
|
||||
$storagePath = str_replace('%storage_path%', $suffixBase . $tenantKey, $disks[$disk]);
|
||||
$publicPath = str_replace('%tenant%', (string) $tenantKey, $publicPath);
|
||||
$storagePath = str_replace('%storage_path%', $tenantStoragePath, $rootOverrides[$disk]);
|
||||
|
||||
tenancy()->central(function () use ($symlinks, $publicPath, $storagePath) {
|
||||
$symlinks->push([public_path($publicPath) => storage_path($storagePath)]);
|
||||
});
|
||||
$symlinks[public_path($publicPath)] = $storagePath;
|
||||
}
|
||||
|
||||
return $symlinks->mapWithKeys(fn ($item) => $item); // [[a => b], [c => d]] -> [a => b, c => d]
|
||||
return $symlinks;
|
||||
}
|
||||
|
||||
/** Determine if the provided path is an existing symlink. */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue