所以我一直在测试Doctrine查询和其他Symfony代码,我必须运行几个命令才能清除Doctrine / Symfony缓存。我正在寻找网络并遇到另一个命令来清除资产资产/等。
从我读过的内容
php app/console cache:clear
只会清除Symfony缓存。它不会包括Doctrine或更多。
我知道我可以创建一个bash脚本来清除我的所有缓存,但这显然意味着我知道所有"清除缓存"命令。我偶然发现了Assetic清除缓存/资产。那些我不知道的人呢?
那么有1"清除缓存"可以为我做的命令?这将包括Symfony / Doctrine / Assetic / Twig以及我安装的任何插件。
非常感谢
答案 0 :(得分:3)
您正在寻找的内容高度依赖于使用缓存的捆绑包的开发人员。标准版本的symfony附带的教义甚至没有集成其缓存清除命令。但你可以做的是使用一个监听器来扩展默认的symfony命令,该监听器运行你想要的所有缓存清除命令:
<?php
namespace DefaultBundle\Event\Listener;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\HttpKernel\CacheClearer\CacheClearerInterface;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Output\ConsoleOutput;
use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\Process\Process;
class CacheClearListener implements CacheClearerInterface
{
private $environment;
/**
* @return array
*/
private static function getCommands()
{
return array(
'php ./app/console doctrine:cache:clear-metadata --no-debug --flush',
'php ./app/console doctrine:cache:clear-query --no-debug --flush',
'php ./app/console doctrine:cache:clear-result --no-debug --flush'
);
}
public function clear($cacheDir)
{
$output = new ConsoleOutput();
$output->writeln('');
$output->writeln('<info>Clearing Doctrine cache</info>');
foreach (self::getCommands() as $command) {
$command .= ' --env='.$this->environment;
$success = $this->executeCommand($command, $output);
if (!$success) {
$output->writeln(sprintf('<info>An error occurs when running: %s!</info>', $command));
exit(1);
}
}
}
/**
* @param string $command
* @param ConsoleOutput $output
*
* @return bool
*/
private function executeCommand($command, ConsoleOutput $output)
{
$p = new Process($command);
$p->setTimeout(null);
$p->run(
function ($type, $data) use ($output) {
$output->write($data, false, OutputInterface::OUTPUT_RAW);
}
);
if (!$p->isSuccessful()) {
return false;
}
$output->writeln('');
return true;
}
/**
* @param Kernel $kernel
*/
public function setKernel(Kernel $kernel)
{
$this->environment = $kernel->getEnvironment();
}
}
像这样注册听众:
<service id="cache_clear_listener" class="DefaultBundle\Event\Listener\CacheClearListener">
<call method="setKernel">
<argument type="service" id="kernel"/>
</call>
<tag name="kernel.cache_clearer" priority="254" />
</service>
就是这样。现在您需要做的就是继续将新的cache cache命令添加到getCommands()方法中。为了找到这个命令,你可以运行类似
的东西php app/console | grep cache
查看包含“cache”一词的所有可用命令
设置好监听器后,每次运行php app / console cache时:清除它将触发你在监听器的getCommands()方法中列出的所有命令。
希望这有帮助, 亚历