php - 如何在 Symfony3.4 中清除 Controller 中的缓存?

标签 php symfony caching php-7.1 symfony-3.4

将 Symfony 从 3.3 迁移到 3.4 后,我的功能不起作用(以前有效)。我必须清除 Controller 中的缓存,当我执行下面的命令时,函数返回错误。

exec(sprintf(
  "php %s/bin/console cache:clear --env=prod",
  $this->getParameter('kernel.project_dir')
));

它返回类似的东西:
Fatal error: require(): Failed opening required '/[...]/var/cache/prod/ContainerAcrshql/getTwig_ExceptionListenerService.php' (include_path='.:/usr/local/share/pear') in /[...]/var/cache/prod/ContainerAcrshql/appProdProjectContainer.php on line 764 Fatal error: require(): Failed opening required '/[...]/var/cache/prod/ContainerAcrshql/getSwiftmailer_EmailSender_ListenerService.php' (include_path='.:/usr/local/share/pear') in /[...]/var/cache/prod/ContainerAcrshql/appProdProjectContainer.php on line 764

另外我可以告诉你,在开发环境中它可以正常工作。此外,当项目运行 localy 并模拟 prod env(在地址栏中,我在 localhost:8000 之后键入 app.php)。我没有其他服务器来检查问题是否仍然发生

最佳答案

我正在调用一个已经实现的 Symfony 命令来清除或预热缓存(在 Symfony 4 上测试)。

use Symfony\Bundle\FrameworkBundle\Console\Application;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Output\BufferedOutput;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\KernelInterface;

class CommandController extends AbstractController
{

    /**
     *
     * @Route("/command/cache/clear", name="command_cache_clear")
     */
    public function command_cache_clear(KernelInterface $kernel)
    {
        return $this->do_command($kernel, 'cache:clear');
    }

    /**
     *
     * @Route("/command/cache/warmup", name="command_cache_warmup")
     */
    public function command_cache_warmup(KernelInterface $kernel)
    {
        return $this->do_command($kernel, 'cache:warmup');
    }

    private function do_command($kernel, $command)
    {
        $env = $kernel->getEnvironment();
        
        $application = new Application($kernel);
        $application->setAutoExit(false);
        
        $input = new ArrayInput(array(
            'command' => $command,
            '--env' => $env
        ));
        
        $output = new BufferedOutput();
        $application->run($input, $output);
        
        $content = $output->fetch();
        
        return new Response($content);
    }
}

关于php - 如何在 Symfony3.4 中清除 Controller 中的缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48166213/

相关文章:

c# - StringBuilder 是否在调用 ToString() 时缓存结果字符串?

php - Symfony 2 和 Twig 缓存——它们是一样的吗?

ruby - 清除 ActiveRecord 缓存

php - 在 PHP 字符串末尾添加反斜杠

php - 结合 SSL/TLS (HTTPS) 的 HTTP 基本身份验证将用于对用户进行身份验证

php - Symfony:如何获取所有服务及其各自的类

php - Symfony 或其他东西在执行测试时与登录用户混淆

php - 当前在线访问者逻辑在 PHP 中

php - 将sql.zip文件导入phpmyadmin时出现内存大小错误

php - 从 MySQL 表中选择 MAX 数字不起作用 - PHP