如何在Symfony2上将Repository对象作为Json返回

时间:2014-02-10 08:44:35

标签: json symfony

我正在尝试返回这样的用户,但当然它不起作用,我需要数据作为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));
}

4 个答案:

答案 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();
}