symfony2 не может получить ответ json в контроллере

Я разрабатываю 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] =>
)

пожалуйста, обратите внимание, что содержимое пусто.

0

Решение

Я не эксперт в FOSRestBundle, но я думаю, что вы должны делать что-то вроде:

$view = $this->view(['one' => 1, 'two' => 2]);
$view->setFormat('json');
return $this->handleView($view);

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

0

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

Я не мог выяснить точную причину, которая вызывает проблему, это могло быть связано со слушателем представления FOSRestBundle.
Перейдя по ссылке, упомянутой @Cerad в его комментарии, я решил создать сервис акции, куда я направлял запрос. Поэтому в моем случае я удалил BarController и создал из него службу, хотя я мог бы использовать этот контроллер в качестве службы, однако я подумал, что использование отдельного класса в качестве службы более целесообразно в моем случае.

0

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