Как очистить кэш с помощью CLI в проекте Silex

Для разработчика, который уже работает с Symfony и внезапно должен работать с проектом на основе Silex, хотя большинство вещей одинаковы, очевидно, есть вещи, которые этого не делают. Одной из самых утомительных задач в Silex, например, при реализации Twig, является необходимость очистки кэша, однако это необходимо сделать вручную, удалив содержимое /cache папка. Как уже упоминалось, если вы пришли из чистой среды Symfony, вы знаете, что в проекте уже есть команда CLI, а именно cache:clear это делает это для вас. Silex не имеет такой функции, однако вы можете реализовать ее самостоятельно, поэтому вам не нужно будет самостоятельно удалять содержимое папки кэша каждый раз, когда вы выходите из среды разработки!

В этой статье мы покажем, как легко добавить cache:clear Команда для вашего приложения Silex.

Важный

В этом уроке мы предполагаем, что вы уже реализовали console.php файл для Silex, где вы можете зарегистрировать новые консольные команды, если вы этого не сделаете, пожалуйста, обратитесь к компоненту консоли Symfony для получения дополнительной информации.

1. Создайте кеш: очистите команду

Мы предоставим вам команду для очистки папки кэша вашего проекта Silex, однако вам нужно знать, как загрузить команду в ваше приложение. Обычно это делается (следуя структуре Silex Skeleton по умолчанию) в console.php файл вашего проекта, где вы должны найти уже консольное приложение Symfony. Если нет, вы можете создать его. В следующем примере добавляется cache:clear Команда создания базового консольного приложения в console.php файл:

getDefinition()->addOption(new InputOption('--env', '-e', InputOption::VALUE_REQUIRED, 'The Environment name.', 'dev'));
$console->setDispatcher($app['dispatcher']);
$console
->register('my-command')
->setDefinition(array(
// new InputOption('some-option', null, InputOption::VALUE_NONE, 'Some help'),
))
->setDescription('My command description')
->setCode(function (InputInterface $input, OutputInterface $output) use ($app) {
// do something
})
;
// Register the cache:clear command !
$console
->register('cache:clear')
->setDescription('Clears the cache')
->setCode(function (InputInterface $input, OutputInterface $output) use ($app) {
if (!isset($app['cache.path']))
{
$output->writeln(sprintf("ERROR: could not clear the cache: \$app['cache.path'] is not set.", 'cache:clear'));
return false;
}
$cacheDir = $app['cache.path'];
$finder = new Finder();
$finder
->in($cacheDir)
->notName('.gitkeep')
;
//--- from Filesystem::remove()
$remove = function ($files, $recurse) {
$files = iterator_to_array($files);
$files = array_reverse($files);
foreach ($files as $file) {
if (!file_exists($file) && !is_link($file)) {
continue;
}
if (is_dir($file) && !is_link($file)) {
$recurse(new \FilesystemIterator($file), $recurse);
if (true !== @rmdir($file)) {
throw new \Exception(sprintf('Failed to remove directory %s', $file));
}
} else {
// https://bugs.php.net/bug.php?id=52176
if (defined('PHP_WINDOWS_VERSION_MAJOR') && is_dir($file)) {
if (true !== @rmdir($file)) {
throw new \Exception(sprintf('Failed to remove file %s', $file));
}
} else {
if (true !== @unlink($file)) {
throw new \Exception(sprintf('Failed to remove file %s', $file));
}
}
}
}
};
$remove($finder, $remove);
$output->writeln("Cache succesfully cleared!");
return true;
})
;
return $console;

Сохраните изменения в файле и перейдите к следующему шагу.

2. Определите путь кеша глобально

В противном случае вы найдете исключение «ОШИБКА: не удалось очистить кэш: $app['cache.path'] не задан. «, если вы попытаетесь выполнить команду, не выполнив этот шаг. Чтобы определить cache.path собственности, вы можете сделать это в app.php файла вашего проекта, просто назначьте новый ключ $app переменная с путем к папке кеша вашего проекта Silex:

Заметка

В зависимости от структуры вашего проекта, путь может измениться, поэтому обязательно укажите правильный путь.

// Define the cache.path property to the cache directory of your Silex Project.
// app.php
$app['cache.path'] = __DIR__.'/../var/cache';

3. Проверьте команду

В качестве последнего шага, после сохранения изменений вы сможете запустить свою команду из своего терминала в корневой папке вашего проекта:

php bin/console cache:clear

Запустив команду из терминала, вы увидите сообщение «Кэш успешно очищен», при условии, что все прошло правильно.

Ссылка на основную публикацию