Пользовательская маршрутизация Symfony на основе доктрины - PullRequest
1 голос
/ 05 марта 2012

Мне нужно иметь динамические маршруты с symfony 2, где параметр URL-адреса добавляется в URL и связан со страницей в базе данных. Каждая страница имеет свой собственный слаг и его содержимое хранится в базе данных. Я прочитал статью Advanced Routing , но это для старой версии Symfony. Для новой версии кажется, что ParamConverter выполняет аналогичную работу. Это правильный способ для реализации маршрутизации на основе доктрины, или я должен написать реальный пользовательский класс маршрутизатора?

1 Ответ

6 голосов
/ 06 марта 2012

Я бы использовал ParamConverter, да. Стандартный DoctrineParamConverter , который поставляется с FrameworkExtraBundle, может обрабатывать самые простые случаи - то есть он знает, как искать объект с указанием типа по полю с тем же именем, что и у заполнителя маршрута:

// routing.yml
foo_route:
    pattern: /{slug}/
    defaults: { _controller: FooVendorBundle:Foo:view }

// FooVendorBundle/Controller/FooController.php
public function view(FooEntity $foo)
{
    // $foo will be an instance of FooEntity
}

Обычно в списке аргументов контроллера у вас есть переменная $slug, которая заполняется из содержимого {slug}, захваченного маршрутом. Однако с помощью ParamConverter он распознает, что вы запрашиваете класс FooEntity, и попытается найти эту сущность по захваченному значению slug и заполнить переменную $foo этой сущностью.

ParamConverter по умолчанию, конечно, ограничен возможностью поиска только свойств, которые на самом деле существуют на сущности: если FooEntity не имеет поля с именем slug, поиск завершится неудачно и исключение будет брошено. Как я уже сказал, это будет обрабатывать большинство основных случаев использования. Если вам нужно более глубокое преобразование параметров запроса, вы всегда можете написать свой собственный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...