我对Symfony的JsonResponse
有一个奇怪的问题,我似乎无法弄明白。我的控制器中有以下操作:
public function loadTemplateAction($id)
{
$repository = $this->getDoctrine()->getRepository('AppBundle:Host');
$template = $repository->find($id);
return new JsonResponse((array)$template);
}
它应该通过传递的id在我的存储库中找到给定的模板。我想在ajax调用中使用返回的数据。它做我想要的,但似乎"前缀"所有带星号的字段名称。所以它返回这样的响应:
我无法弄清楚为什么它会将这些星号放在字段名称前面(显然它们在我的数据源中没有这样命名)。有没有人知道可能导致这种行为的原因是什么?
答案 0 :(得分:3)
首先,请参阅http://php.net/manual/en/language.types.array.php:
如果将对象转换为数组,则结果是一个数组 元素是对象的属性。键是成员变量 名称,有一些值得注意的例外:整数属性是 不可访问;私有变量具有前缀的类名 变量名; 受保护的变量有' *'预先到 变量名。这些前置值在任一侧都有空字节。 这可能会导致一些意外行为:
您可能不应该仅仅将对象强制转换为数组并对JSON进行编码。看看现有的一些序列化解决方案:
http://symfony.com/doc/current/cookbook/serializer.html
http://jmsyst.com/libs/serializer
这些库可以很好地控制如何将对象序列化为不同的格式,包括JSON。
如果您对对象序列化为JSON的方式的控制较少,则可以实现JsonSerializable接口。