Для разработчика, который уже работает с 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
Запустив команду из терминала, вы увидите сообщение «Кэш успешно очищен», при условии, что все прошло правильно.