如何在Silex项目中使用CLI清除缓存

本文概述

  • 1.创建cache:clear命令
  • 2.全局定义缓存路径
  • 3.测试命令
对于已经与Symfony合作并且突然不得不与基于Silex的项目一起工作的开发人员, 尽管大多数情况是相同的, 但显然有些事情并没有。 Silex中最繁琐的任务之一(例如, 当你实现Twig时)是需要清除缓存, 但是必须手动完成, 删除/ cache文件夹的内容。如前所述, 如果你来自纯Symfony环境, 那么你会知道项目中已经有一个CLI命令, 即cache:clear可以为你完成此操作。 Silex没有此功能, 但是你可以自己实现, 因此无需在每次退出开发环境时都自行删除缓存文件夹的内容!
在本文中, 我们将向你展示如何轻松地将cache:clear命令添加到你的Silex应用程序。
重要在本教程中, 我们假设你已经为silex实现了console.php文件, 你可以在其中注册新的控制台命令, 如果你没有这样做, 请参考Symfony的控制台组件以获取更多信息。
1.创建cache:clear命令【如何在Silex项目中使用CLI清除缓存】我们将为你提供清除Silex项目缓存文件夹的命令, 但是你需要知道如何在应用程序中加载该命令。这通常是在项目的console.php文件中完成的(遵循默认的Silex Skeleton结构), 在该文件中你应该已经找到一个Symfony控制台应用程序。如果没有, 则可以创建它。以下示例添加了cache:clear命令, 该命令在console.php文件中创建一个基本的控制台应用程序:
< ?php// src/console.phpuse Symfony\Component\Console\Application; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Finder\Finder; // Your application, this is just an example of initialization, this should be different in your app ...$console = new Application('My Silex Application', 'n/a'); $console-> 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> ERROR:< /error> could not clear the cache: < info> \$app['cache.path']< /info> 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=52176if (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项目的cache文件夹的路径:
注意根据项目的结构, 路径可能会更改, 因此请确保提供正确的路径。
// 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

从终端运行命令后, 假设一切正常, 你将看到” 缓存已成功清除” 消息。
编码愉快!

    推荐阅读