我正在尝试返回这样的用户,但当然它不起作用,我需要数据作为JSon,因为我正在使用BackboneJs
/**
* @Route("/mytest",name="ajax_user_path")
*/
public function ajaxAction()
{
$em = $this->get('doctrine')->getManager();
$users = $this->get('doctrine')->getRepository('GabrielUserBundle:Fosuser')->findAll();
$response = array("users"=>$users);
return new Response(json_encode($response));
}
答案 0 :(得分:9)
感谢您的帮助,这是解决方案 获取JMSSerializerBundle,
这是控制器上的代码
/**
* @Route("/user")
* @Template()
*/
public function userAction()
{
$em = $this->get('doctrine')->getManager();
$users = $this->get('doctrine')->getRepository('GabrielUserBundle:Fosuser')->findAll();
$serializer = $this->get('jms_serializer');
$response = $serializer->serialize($users,'json');
return new Response($response);
}
答案 1 :(得分:1)
因此,findAll
returns一组实体(对象)和json_encode
无法正确编码该数组。你必须准备你的数据berofe发送响应:
示例:
use Symfony\Component\HttpFoundation\JsonResponse;
/**
* @Route("/mytest",name="ajax_user_path")
*/
public function ajaxAction()
{
$users = $this->get('doctrine')->getRepository('GabrielUserBundle:Fosuser')->findAll();
$response = array();
foreach ($users as $user) {
$response[] = array(
'user_id' => $user->getId(),
// other fields
);
}
return new JsonResponse(json_encode($response));
}
而且,如果你把准备回应放在前面,那将会很棒。 UserRepository
上课。
答案 2 :(得分:0)
使用Symfony,您可以使用JsonResponse:
return new JsonResponse($users);
不要忘记添加标题:
use Symfony\Component\HttpFoundation\JsonResponse;
答案 3 :(得分:0)
我从来没有尝试过对一个完整的对象进行编码,但是我使用了json这样的信息数组:
$vars = array(
'test' => 'test'
);
$response = new JsonResponse($vars);
return $response;
正如你在JsonResponse中看到的,它的函数setData()
正在编码数组,所以你不必自己动手:
public function setData($data = array())
{
// Encode <, >, ', &, and " for RFC4627-compliant JSON, which may also be embedded into HTML.
$this->data = json_encode($data, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_QUOT);
return $this->update();
}