Маршруты FOSRESBundle с @QueryParam

Я использую Symfony 2.3.4 и FOSRestBundle 0.13.1. Я настроил маршруты для автоматической генерации FOSRestBundle. Все работает отлично, пока я не добавлю аннотацию @QueryParam к любому методу. Эта аннотация изменяет маршрут и вместо извлечения переменной из URL-адреса ожидает, что она будет передана в качестве параметра.

i.e

/**
* @return array
* @Rest\View
*/
public function getDetailsAction($user) {
......
}

-bash-4.2$ php app/console router:debug 
get_details      GET    ANY    ANY  /api/users/details/{user}

Но как только я добавляю аннотацию @QueryParam, мой маршрут меняется на:

/**
* @QueryParam(name="user", requirements="\w+", strict=true, nullable=false, description="Name of the user to query details for")
* @return array
* @Rest\View
*/
public function getDetailsAction($user) {
......
}

-bash-4.2$ php app/console router:debug 
get_details      GET    ANY    ANY  /api/users/details

Почему мои маршруты меняются? Разве нельзя сохранить исходные маршруты и одновременно использовать аннотацию @QueryParam?


person flivan    schedule 02.10.2013    source источник


Ответы (1)


Используя аннотацию QueryParam, вы объявляете, что параметр $user предоставляется как параметр запроса (например, /api/user/details?user=foo), поэтому больше не осталось параметров действия для включения в маршрут.

Если вы хотите добавить требования к автоматически сгенерированному маршруту, вы должны вместо этого использовать аннотацию @Rest\Route, как в

/**
 * @Rest\View
 * @Rest\Route(requirements={"user"="\w+"})
 */
public function getDetailsAction($user) {
-----
}

Обратите внимание, что нет эквивалента параметрам strict или nullable. Если требования не выполнены или параметр отсутствует, маршрут просто не будет соответствовать, что приводит к ошибке 404, если ни один другой маршрут не соответствует запросу. Также, насколько мне известно, нет возможности прикрепить описание к параметрам маршрута.

person aferber    schedule 06.10.2013