Мне нужно создать собственный URL-адрес в моем ави. Я использую fos rest bundle.
Пользовательский 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 "GET /api/v1/public/users/confirm" (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__);
}
Согласен с комментарием @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;
}
}
вам не нужно добавлять параметры запроса к определению маршрута
также они придут после полного URL-адреса, например, после ".json"
то есть:
/api/v1/public/users/confirm.json?cd=ejwffw
поэтому я не знаком с определениями маршрутизации аннотаций, но он скорее должен выглядеть так:
@GET("/users/confirm.{_format}")
и в вашем действии у вас есть доступ к вашему параметру по запросу
sth нравится:
$request=$this->getRequest();
$code = $request->get('cd') ? $request->get('cd') : false;