Файл: vendor/laravel/framework/src/Illuminate/Cache/Console/ClearCommand.php
Строк: 166
<?php
namespace IlluminateCacheConsole;
use BadMethodCallException;
use IlluminateCacheCacheManager;
use IlluminateConsoleCommand;
use IlluminateConsoleProhibitable;
use IlluminateFilesystemFilesystem;
use SymfonyComponentConsoleAttributeAsCommand;
use SymfonyComponentConsoleInputInputArgument;
use SymfonyComponentConsoleInputInputOption;
#[AsCommand(name: 'cache:clear')]
class ClearCommand extends Command
{
use Prohibitable;
/**
* The console command name.
*
* @var string
*/
protected $name = 'cache:clear';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Flush the application cache';
/**
* The cache manager instance.
*
* @var IlluminateCacheCacheManager
*/
protected $cache;
/**
* The filesystem instance.
*
* @var IlluminateFilesystemFilesystem
*/
protected $files;
/**
* Create a new cache clear command instance.
*
* @param IlluminateCacheCacheManager $cache
* @param IlluminateFilesystemFilesystem $files
*/
public function __construct(CacheManager $cache, Filesystem $files)
{
parent::__construct();
$this->cache = $cache;
$this->files = $files;
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
if ($this->isProhibited()) {
return self::FAILURE;
}
if ($this->option('locks')) {
return $this->clearLocks();
}
$this->laravel['events']->dispatch(
'cache:clearing', [$this->argument('store'), $this->tags()]
);
$successful = $this->cache()->flush();
$this->flushFacades();
if (! $successful) {
$this->components->error('Failed to clear cache. Make sure you have the appropriate permissions.');
return self::FAILURE;
}
$this->laravel['events']->dispatch(
'cache:cleared', [$this->argument('store'), $this->tags()]
);
$this->components->info('Application cache cleared successfully.');
return self::SUCCESS;
}
/**
* Clear all locks from the cache store.
*
* @return int
*/
protected function clearLocks()
{
if (! empty($this->tags())) {
$this->components->error('Cache tags cannot be used when clearing locks.');
return self::FAILURE;
}
try {
$successful = $this->cache()->flushLocks();
} catch (BadMethodCallException) {
$this->components->error('This cache store does not support clearing locks.');
return self::FAILURE;
}
if (! $successful) {
$this->components->error('Failed to clear cache locks. Make sure you have the appropriate permissions.');
return self::FAILURE;
}
$this->components->info('Application cache locks cleared successfully.');
return self::SUCCESS;
}
/**
* Flush the real-time facades stored in the cache directory.
*
* @return void
*/
public function flushFacades()
{
if (! $this->files->exists($storagePath = storage_path('framework/cache'))) {
return;
}
foreach ($this->files->files($storagePath) as $file) {
if (preg_match('/facade-.*.php$/', $file)) {
$this->files->delete($file);
}
}
}
/**
* Get the cache instance for the command.
*
* @return IlluminateCacheRepository
*/
protected function cache()
{
$cache = $this->cache->store($this->argument('store'));
return empty($this->tags()) ? $cache : $cache->tags($this->tags());
}
/**
* Get the tags passed to the command.
*
* @return array
*/
protected function tags()
{
return array_filter(explode(',', $this->option('tags') ?? ''));
}
/**
* Get the console command arguments.
*
* @return array
*/
protected function getArguments()
{
return [
['store', InputArgument::OPTIONAL, 'The name of the store you would like to clear'],
];
}
/**
* Get the console command options.
*
* @return array
*/
protected function getOptions()
{
return [
['tags', null, InputOption::VALUE_OPTIONAL, 'The cache tags you would like to clear', null],
['locks', null, InputOption::VALUE_NONE, 'Only clear cache locks'],
];
}
}