簡體   English   中英

如何在 Symfony3.4 中清除 Controller 中的緩存?

[英]How to clear cache in Controller in Symfony3.4?

將 Symfony 從 3.3 遷移到 3.4 后,我的功能不起作用(以前有效)。 我必須清除控制器中的緩存,當我執行下面的命令時,函數返回錯誤。

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);
    }
}

您應該向 var/ 目錄添加有效權限以訪問緩存文件:

chmod ... var/ -R

從web訪問時使用的用戶是www-data

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM