mirror of
https://gitee.com/ShopeX/ECShopX
synced 2026-08-04 03:06:23 +08:00
79 lines
2.0 KiB
PHP
79 lines
2.0 KiB
PHP
<?php
|
|
|
|
namespace App\Console\Commands;
|
|
|
|
use Illuminate\Console\Command;
|
|
|
|
class StorageLinkCommand extends Command
|
|
{
|
|
/**
|
|
* The console command signature.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $signature = 'storage:link
|
|
{--relative : Create the symbolic link using relative paths}
|
|
{--force : Recreate existing symbolic links}';
|
|
|
|
/**
|
|
* The console command description.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $description = 'Create the symbolic links configured for the application';
|
|
|
|
/**
|
|
* Execute the console command.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function handle()
|
|
{
|
|
$relative = $this->option('relative');
|
|
|
|
foreach ($this->links() as $link => $target) {
|
|
if (file_exists($link) && ! $this->isRemovableSymlink($link, $this->option('force'))) {
|
|
$this->error("The [$link] link already exists.");
|
|
continue;
|
|
}
|
|
|
|
if (is_link($link)) {
|
|
$this->laravel->make('files')->delete($link);
|
|
}
|
|
|
|
if ($relative) {
|
|
$this->laravel->make('files')->relativeLink($target, $link);
|
|
} else {
|
|
$this->laravel->make('files')->link($target, $link);
|
|
}
|
|
|
|
$this->info("The [$link] link has been connected to [$target].");
|
|
}
|
|
|
|
$this->info('The links have been created.');
|
|
}
|
|
|
|
/**
|
|
* Get the symbolic links that are configured for the application.
|
|
*
|
|
* @return array
|
|
*/
|
|
protected function links()
|
|
{
|
|
return $this->laravel['config']['filesystems.links'] ??
|
|
[public_path('storage') => storage_path('app/public')];
|
|
}
|
|
|
|
/**
|
|
* Determine if the provided path is a symlink that can be removed.
|
|
*
|
|
* @param string $link
|
|
* @param bool $force
|
|
* @return bool
|
|
*/
|
|
protected function isRemovableSymlink(string $link, bool $force): bool
|
|
{
|
|
return is_link($link) && $force;
|
|
}
|
|
}
|