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