2012-01-12 58 views
0

我想动态添加路由。我在数据库中存储文件树。根据文档在该树中的位置,我可以为特定文档生成url。问题是,无论何时将文档添加到该树中,我都必须清理缓存,因为url匹配器是预先存储的。但是,如果我通过删除缓存目录错误的内容来清除控制器内部的缓存,就会抛出错误。有什么办法,如何解决它?如何重置控制器内的symfony2缓存路线?

多个问题说明:

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

回答

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; 

这不是你想要的?

+0

我不确定,我更新了问题 – ramoo 2012-01-13 11:20:35