首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Symfony 2中的配置发生变化时重新生成路由缓存

如何在Symfony 2中的配置发生变化时重新生成路由缓存
EN

Stack Overflow用户
提问于 2017-01-31 09:48:21
回答 1查看 3.3K关注 0票数 1

我目前正在Symfony 2中编写一个自定义的路由加载器,它将根据主配置文件中定义的一些配置选项生成路由。问题是Symfony缓存自定义路由加载器生成的路由。当配置文件更改时,是否有一种方法可以更新缓存?

我在app/config/config.yml中定义了这样的配置

代码语言:javascript
运行
复制
admin:
    entities:
        - BlogBundle\Entity\Post
        - BlogBundle\Entity\Comment

我的路由加载程序读取配置文件,并根据实体生成一些路由。现在的问题是,一旦这些路由由Symfony生成和缓存,除非手动调用php app/console cache:clear,否则我无法更改它们。我的意思是,如果我向配置中添加一个实体:

代码语言:javascript
运行
复制
admin:
    entities:
        - BlogBundle\Entity\Post
        - BlogBundle\Entity\Comment
        - TrainingBundle\Entity\Training

为了创建和缓存新的路由,我必须再次使用php app/console cache:clear手动清除缓存。如果更改配置,我希望路由缓存无效,这样对服务器的新请求将强制路由的重新生成。

EN

回答 1

Stack Overflow用户

发布于 2017-01-31 10:40:00

选项1

如果您的自定义加载器类可以访问内核或容器(通过DI),则可以从该类调用控制台缓存清除命令。

例如。

代码语言:javascript
运行
复制
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

这个回答还为您提供了另一个选项

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41954271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档