Как сбросить кешированные маршруты Symfony2 внутри контроллера? - PullRequest
0 голосов
/ 12 января 2012

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

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

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

1 Ответ

0 голосов
/ 13 января 2012

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

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

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

...