我目前正在Symfony 2中编写一个自定义的路由加载器,它将根据主配置文件中定义的一些配置选项生成路由。问题是Symfony缓存自定义路由加载器生成的路由。当配置文件更改时,是否有一种方法可以更新缓存?
我在app/config/config.yml中定义了这样的配置
admin:
entities:
- BlogBundle\Entity\Post
- BlogBundle\Entity\Comment我的路由加载程序读取配置文件,并根据实体生成一些路由。现在的问题是,一旦这些路由由Symfony生成和缓存,除非手动调用php app/console cache:clear,否则我无法更改它们。我的意思是,如果我向配置中添加一个实体:
admin:
entities:
- BlogBundle\Entity\Post
- BlogBundle\Entity\Comment
- TrainingBundle\Entity\Training为了创建和缓存新的路由,我必须再次使用php app/console cache:clear手动清除缓存。如果更改配置,我希望路由缓存无效,这样对服务器的新请求将强制路由的重新生成。
发布于 2017-01-31 10:40:00
选项1
如果您的自定义加载器类可以访问内核或容器(通过DI),则可以从该类调用控制台缓存清除命令。
例如。
namespace AppBundle\MyLoader;
use Symfony\Bundle\FrameworkBundle\Console\Application;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Output\BufferedOutput;
use Symfony\Component\HttpFoundation\Response;
class MyLoader
{
private $kernel;
public function __construct($kernel)
{
$this->kernel = $kernel;
}
public function myFunction()
{
$application = new Application($this->kernel);
$application->setAutoExit(false);
$input = new ArrayInput(array(
'command' => 'cache:clear',
'--env' => 'prod',
));
// You can use NullOutput() if you don't need the output
$output = new BufferedOutput();
$application->run($input, $output);
// return the output, don't use if you used NullOutput()
$content = $output->fetch();
// return new Response(""), if you used NullOutput()
return new Response($content);
}
}参考文献:从控制器调用命令
在有人指出之前,免责声明;注入内核/conatiner并不被认为是“最佳实践”,但可以是一个解决方案。
选项2
您还可以编写自己的控制台命令,该命令扩展了Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand,该命令只调用clear缓存命令。
参考文献;从另一个人呼叫命令
选项3
这个回答还为您提供了另一个选项
https://stackoverflow.com/questions/41954271
复制相似问题