2012-01-12 2 views
0

Я хочу добавить маршруты динамически. Я храню дерево документов в базе данных. Основываясь на позиции документа в этом дереве, я могу генерировать URL-адрес для конкретного документа. Проблема в том, что всякий раз, когда я добавляю документ в это дерево, я должен очищать кеш, потому что убирается сборщик URL-адресов. Но если я очищу кэш внутри контроллера, удалив содержимое кеш-каталога, то будет сброшена ошибка. Есть ли способ, как его решить?Как сбросить кешированные ключи symfony2 внутри контроллера?

более проблема спецификации:

мне нужно больше маршрутов для создания, так как в зависимости от типа документов, его под названием конкретного контроллера и действия (даже с определенными параметрами). В элементе дерева item я храню url_part и некоторые параметры для создания определенного маршрута (например, контроллера и действия), а затем параметры, которые передаются этому контроллеру. У объекта есть метод getRoute(), который знает, как построить маршрут из своих данных. Тогда у меня есть, например, документ на странице, это объект, называемый страницей, и он имеет отношение к элементу дерева (я не хотел связываться с наследованием). Когда я создаю страницу, она знает, как заполнять данные для связанного элемента дерева. Проблема в том, что когда я создаю страницу, ее неуязвимый кеш с существующими маршрутами. Я хочу, чтобы маршруты были кешированы, поэтому после создания страницы я хочу сбросить кешированные маршруты.

ответ

0

Почему вы хотите генерировать маршруты динамически? Не можете ли вы создать один маршрут с шаблоном, который позволяет слэш?

Я сделал аналогичную 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; 

Разве это не то, что вы ищете?

+0

Я не уверен, я обновил вопрос – ramoo

Смежные вопросы