Symfony JsonResponse中格式错误的字段名称

时间:2015-08-21 12:42:53

标签: php symfony

我对Symfony的JsonResponse有一个奇怪的问题,我似乎无法弄明白。我的控制器中有以下操作:

public function loadTemplateAction($id)
{
    $repository = $this->getDoctrine()->getRepository('AppBundle:Host');
    $template = $repository->find($id);

    return new JsonResponse((array)$template);
}

它应该通过传递的id在我的存储库中找到给定的模板。我想在ajax调用中使用返回的数据。它做我想要的,但似乎"前缀"所有带星号的字段名称。所以它返回这样的响应:

Console output

我无法弄清楚为什么它会将这些星号放在字段名称前面(显然它们在我的数据源中没有这样命名)。有没有人知道可能导致这种行为的原因是什么?

1 个答案:

答案 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接口。