如何在Symfony2中将对象转换为JSON

8

我正在使用这个:

    $users = $em->getRepository('UserBundle:User')->getallUsers($search);
    $response = new Response(json_encode($users));
    $response->headers->set('Content-Type', 'application/json');
    return $response;

用户是多个实体而不是单个结果。

但我得到的是:

[{},{},{},{},{},{}]

我希望有类似这样的东西:
[ { label: $user.getName(), value: $user.getId() }, ... ]

我该怎么做?

编辑: 我也尝试了json_encode($users->toArray())但我得到了这个错误:

在一个非对象上调用成员函数toArray()


1
你使用的Symfony版本是哪个? - Vitalii Zurian
2个回答

6

你需要有一种序列化对象的方法,不能指望json_encode神奇地猜测可以编码哪些字段。

我建议用一个很好的捆绑包JMSSerializerBundle来完成这个任务。使用前请确保仔细阅读文档!

最终结果可能看起来像这样:

$users = $em->getRepository('UserBundle:User')->getallUsers($search);
$response = new Response($container->get('serializer')->serialize($users, 'json'));

1
我已经安装了JMSSerializerBundle,但是我收到了这个错误消息:“You have requested a non-existent service "serializer".” 我该如何声明JMS的服务? - Mirage
它存在于JMS供应商中,并且是最新版本。 - Mirage
1
你需要在你的 app/AppKernel.php 文件中注册 bundle。 - AdrienBrault
你可以尝试: $serializer = $this->container->get('serializer'); $response = new Response($serializer->serialize($users, 'json')); - Boun
@Inoryy 在 container 前面漏掉了 $this - Hunt

0

尝试 {{ your_variable|raw }}

抱歉回复晚了


这是最好的简单方法,但它不是自动的,并且需要在一个类中实现__toString()函数,该函数返回json_serialize(array(..))产品。 - Croll

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接