2012-03-05 4 views
1

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

+0

Можете ли вы объяснить, что вы подразумеваете под динамическим маршрутом, пожалуйста? – Problematic

+0

уверен, я имею в виду, что у меня есть содержимое каждой страницы в базе данных с столбцом slug в таблице, который служит как «url». Когда я цифру domain.com/test test является slug и является динамическим – Stefano

+0

Если вы говорите о слизняках, вы должны получить все, что захотите, в документе Symfony2: http://symfony.com/doc/current/book/routing. html – Nanocom

ответ

6

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

// 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, то поиск потерпит неудачу и будет сгенерировано исключение , Как я уже сказал, это будет обрабатывать большинство базовых вариантов использования. Если вам нужно больше углубленного преобразования параметров запроса, вы всегда можете написать свой собственный.

+0

, если мне нужно обрабатывать динамические страницы с помощью slug, но также и обычные страницы с контроллерами я должен использовать собственный класс маршрутизатора, который обрабатывает каждый из типов страниц (статический и динамический)? – Stefano

+0

Я действительно начинаю любить симфонию. +1 –

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