2012-01-12 57 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