FOS Rest Custom получить URL в Symfony2

Мне нужно создать пользовательский URL в моем API для отдыха. Я использую FOS Отдых расслоение.

Пользовательский URL выглядит так:

http://myapi.com/api/v1/public/users/confirm?cd=<some_code>.json

Я пытался:

@GET("/users/confirm?cd={cd}")

и когда я бегу:

php /app/console route:debug

Я получаю это:

...
....
get_confirm GET ANY ANY  /api/v1/public/users/confirm?cd={cd}.{_format}
...
...

но в моем тесте, когда я пытаюсь нажать на этот URL, я получаю:

No route found for &quot;GET /api/v1/public/users/confirm&quot; (404 Not Found)

может кто-нибудь помочь мне в этом. Как сформировать такие URL.

Мой код действия контроллера:

/*
* @GET("/users/confirm?cd={cd}")
*/
public function getConfirmAction($cd) {

//Some code for user confirmation

return return View::create(array('successmessage'=>'Your account has been verified successfully. Please login.', Codes::HTTP_OK);
}

Код PHPUnitTest:

public function testGetConfirmThrowsInvalidArgumentException() {
$this->client->request(
'GET', '/api/v1/public/users/confirm?cd=abcd123.json'
);

$response = $this->client->getResponse();

print_r($response->getContent());
exit(__METHOD__);
}

0

Решение

Согласился с комментарием @john:
Вам не нужно добавлять параметры запроса в определение маршрута.

Я предполагаю, что в основном вы ищете, чтобы параметр всегда поставлялся с URL. Если это ваше требование, то FOSRestBundle имеет классную функцию, которая называется сборщик парам. С его помощью вы можете определять параметры строки запроса с помощью аннотаций, разрешать их обнулять или нет, устанавливать значения по умолчанию, определять требования.

для вашего случая, если вы ожидаете, что CD будет число, то вы можете иметь аннотации как

@QueryParam(name="cd", nullable=true, requirements="\d+")

см. пример ниже для примера кода

/*
* function desc
* @QueryParam(name="cd", nullable=true, requirements="\d+")
* @param ParamFetcher $paramFetcher
*/
public function getConfirmActionAction(ParamFetcher $paramFetcher)
{
//access the parameter here
foreach ($paramFetcher->all() as $name => $value) {
echo $name."==>". $value;
}

}
2

Другие решения

Вам не нужно добавлять параметры запроса в определение маршрута.

также они будут следовать после полного URL, например, после «.json»

то есть:

/api/v1/public/users/confirm.json?cd=ejwffw

так что у меня нет опыта с определениями маршрутизации аннотаций, но это должно быть что-то вроде этого:

@GET("/users/confirm.{_format}")

и в вашем действии у вас есть доступ к вашему параметру через запрос

что-то вроде:

$request=$this->getRequest();
$code = $request->get('cd') ? $request->get('cd') : false;
1

По вопросам рекламы [email protected]