Почему вы хотите генерировать маршруты динамически?Разве вы не можете создать один маршрут с шаблоном, который разрешает слэши?
Ранее я создавал аналогичную CMS с использованием Symfony2 и использовал StofDoctrineExtensionsBundle (посмотрите на Tree
и Sluggable
).
Моя сущность 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;
Разве это не то, что вы ищете?