2016-02-08 3 views
0

Я использую маршрутизацию с аннотациями в моем проекте symfony2, и мне нужно реализовать новую функцию. Мне нужно создать страницу, зависит от текущего города. Город принимается в следующих действиях:Symfony custom routing

/** 
* @Route("/") 
* @Route("/{name}" 
*/ 

И мне нужны некоторые пользовательские требования к параметру города. Я хочу сопоставить этот маршрут только в том случае, если переданный город содержится в каком-то динамическом массиве, загруженном из базы данных, в другом случае It shoud переходит к следующему маршруту, не выбрасывая исключение.

Я попытался использовать требования, но не понял, как передать объект в это. С выражением той же самой проблемы, мне нужно передать мое обслуживание, но не знаю, как это сделать.

+0

В чем проблема с проверкой, если город существует внутри действия контроллера? – Benz

+0

Проблема здесь, что я не могу продолжить проверку маршрута от действия, если город не существует. – Phantaminuum

+0

А что, если вы перенаправите его вручную на следующий маршрут? – Benz

ответ

0

Вы можете попробовать использовать преобразователь параметров аннотации.

использование Sensio \ Bundle \ FrameworkExtraBundle \ Configuration \ Route; Использование Sensio \ Bundle \ FrameworkExtraBundle \ Configuration \ ParamConverter;

/** 
* @Route("/city/{name}") 
* @ParamConverter("city", class="AppBundle:City", options={"entity_manager" = "foo"}) 
*/ 
public function showAction(City $city) 
{ 
} 

Else, я думаю, вы можете сделать это самостоятельно в своем контроллере.

Но, пожалуйста, обратите внимание, что использование 2 маршрутов для одного и того же действия контроллера не является реальной практикой.

И, как указано в каком-то комментарии, вы должны быть в состоянии иметь дело с такого рода проверки внутри контроллера, а затем перенаправить, где это необходимо