如何在控制器内重置symfony2缓存路由?

时间:2012-01-12 14:28:19

标签: caching routing symfony

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

更多问题规范:

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

1 个答案:

答案 0 :(得分:0)

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

之前我使用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;

这不是你要找的吗?