Я разрабатываю REST API с помощью FOSRestBundle. Я не могу отправить ответ JSON от контроллера. Я пересылаю запрос от fooAction из FooControllerFoo некоему BarController, когда я пытаюсь вернуть JSON-ответ от этого действия, я получаю пустой массив.
вот сценарий:
FooController.php
class FooController extends FOSRestController {
...
public function fooAction() {
...
$response = $this->forward('ApplicationPApiBundle:bar:getByZipCode', array(), array('zipcode' => $zipcode));
print_r($response); //getting blank array here
...
}
}
BarController.php
class BarController extends FOSRestController {
...
public function getByZipCodeAction() {
...
$response = new Response((array("one"=>"1", "two"=> "2")));
$response->headers->set('Content-Type', 'application/json');
// print_r($response); // after printing I can see data in json format
return $response;
}
}
Когда я печатаю ответ в fooAction FooController, я вижу его как пустой массив, однако, когда я печатаю его в getByZipCodeAction Barcontroller, прежде чем вернуть его, я вижу соответствующий объект ответа с содержимым json.
Кто-нибудь может помочь мне понять, что здесь происходит?
РЕДАКТИРОВАТЬ:
Объект ответа печатается в Barcontroller перед его возвратом:
Symfony\Component\HttpFoundation\Response Object
(
[headers] => Symfony\Component\HttpFoundation\ResponseHeaderBag Object
(
[computedCacheControl:protected] => Array
(
[no-cache] => 1
)
[cookies:protected] => Array
(
)
[headerNames:protected] => Array
(
[cache-control] => Cache-Control
[date] => Date
[content-type] => Content-Type
)
[headers:protected] => Array
(
[cache-control] => Array
(
[0] => no-cache
)
[date] => Array
(
[0] => Wed, 24 Sep 2014 13:48:49 GMT
)
[content-type] => Array
(
[0] => application/json
)
)
[cacheControl:protected] => Array
(
)
)
[content:protected] => {"one":"1","two":"2"}
[version:protected] => 1.0
[statusCode:protected] => 200
[statusText:protected] => OK
[charset:protected] =>
)
================================================== ===============
Объект ответа, напечатанный в Foocontroller после получения ответа от перенаправленного действия:
Symfony\Component\HttpFoundation\Response Object
(
[headers] => Symfony\Component\HttpFoundation\ResponseHeaderBag Object
(
[computedCacheControl:protected] => Array
(
[no-cache] => 1
)
[cookies:protected] => Array
(
)
[headerNames:protected] => Array
(
[cache-control] => Cache-Control
[date] => Date
[content-type] => Content-Type
[x-debug-token] => X-Debug-Token
[x-debug-token-link] => X-Debug-Token-Link
)
[headers:protected] => Array
(
[cache-control] => Array
(
[0] => no-cache
)
[date] => Array
(
[0] => Wed, 24 Sep 2014 13:48:49 GMT
)
[content-type] => Array
(
[0] => application/json
)
[x-debug-token] => Array
(
[0] => 168be3
)
[x-debug-token-link] => Array
(
[0] => /app_dev.php/_profiler/168be3
)
)
[cacheControl:protected] => Array
(
)
)
[content:protected] => []
[version:protected] => 1.0
[statusCode:protected] => 200
[statusText:protected] => OK
[charset:protected] =>
)
пожалуйста, обратите внимание, что содержимое пусто.
Я не эксперт в FOSRestBundle, но я думаю, что вы должны делать что-то вроде:
$view = $this->view(['one' => 1, 'two' => 2]);
$view->setFormat('json');
return $this->handleView($view);
Я полагаю, что в данный момент происходит то, что слушатель обработчика представления не получает никаких данных, поэтому переопределяет содержимое ответа на ноль.
Я не мог выяснить точную причину, которая вызывает проблему, это могло быть связано со слушателем представления FOSRestBundle.
Перейдя по ссылке, упомянутой @Cerad в его комментарии, я решил создать сервис акции, куда я направлял запрос. Поэтому в моем случае я удалил BarController и создал из него службу, хотя я мог бы использовать этот контроллер в качестве службы, однако я подумал, что использование отдельного класса в качестве службы более целесообразно в моем случае.