【问题标题】:how to reset symfony2 cached routes inside controller?如何重置控制器内的 symfony2 缓存路由?
【发布时间】:2012-01-12 14:28:19
【问题描述】:

我想动态添加路由。我将文档树存储在数据库中。基于文档在该树中的位置,我可以为特定文档生成 url。问题是,每当我将文档添加到该树时,我都必须清理缓存,因为 url 匹配器已预先缓存。但是,如果我通过删除缓存目录的内容来清理控制器内部的缓存,则会引发错误。有什么办法,怎么解决?

更多问题说明:

我需要创建更多路由,因为根据文档类型,它被称为特定控制器和操作(即使具有特定参数)。在树项目实体中,我存储 url_part 和一些参数以创建特定的路由(如控制器和操作),然后是参数,这些参数将传递给该控制器。实体有方法 getRoute() 知道如何从其数据构建路由。然后我有例如页面文档,它是称为页面的实体,它与树项有关(我不想弄乱继承)。当我创建页面时,它知道如何为相关树项填充数据。问题是,当我创建页面时,它不是未经验证的缓存与现有路由。我想缓存路由,所以在创建页面后我想重置缓存的路由。

【问题讨论】:

    标签: caching routing symfony


    【解决方案1】:

    为什么要动态生成路由?你不能用允许斜线的模式创建一个单一的路线吗?

    我之前使用 Symfony2 制作了一个类似的 CMS,我使用了StofDoctrineExtensionsBundle(看看TreeSluggable)。

    我的Document 实体有以下字段来支持树结构:

    /**
     * @Gedmo\TreeLeft
     * @ORM\Column(name="`left`", type="integer")
     */
    private $left;
    
    /**
     * @Gedmo\TreeLevel
     * @ORM\Column(name="level", type="integer")
     */
    private $level;
    
    /**
     * @Gedmo\TreeRight
     * @ORM\Column(name="`right`", type="integer")
     */
    private $right;
    
    /**
     * @Gedmo\TreeRoot
     * @ORM\Column(name="root", type="integer", nullable=true)
     */
    private $root;
    
    /**
     * @Gedmo\TreeParent
     * @ORM\ManyToOne(targetEntity="Page", inversedBy="children")
     * @ORM\JoinColumn(name="parent_id", referencedColumnName="id", onDelete="SET NULL")
     */
    private $parent;
    
    /**
     * @ORM\OneToMany(targetEntity="Page", mappedBy="parent")
     * @ORM\OrderBy({"left" = "ASC"})
     */
    private $children;
    

    还有一个反映层次结构的slug 字段:

    /**
     * @var string $slug
     *
     * @ORM\Column(name="slug", type="string", length=255, unique=true)
     * @Gedmo\Slug(handlers={
     *      @Gedmo\SlugHandler(class="Gedmo\Sluggable\Handler\TreeSlugHandler", options={
     *          @Gedmo\SlugHandlerOption(name="parentRelationField", value="parent"),
     *          @Gedmo\SlugHandlerOption(name="separator", value="/")
     *      })
     * }, fields={"title"})
     */
    private $slug;
    

    这不是你要找的吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-21
      • 2012-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-15
      • 2015-12-09
      相关资源
      最近更新 更多