我一直在寻找解决我问题的方法一段时间没有成功,所以我在这里问。
如何在包含私有属性的对象数组(或只是对象)上返回json编码的结果?
实际上,当你使用json_encode($ myObject)时,它不会显示私有或受保护的属性,这些属性在使用Symfony时会出现在模型的任何地方......
我很惊讶我找不到像json_encode这样的方法来调用getter而不是属性本身。
有什么想法吗?
修改
在这种情况下,我宁愿做一个看起来像这样的独特功能:
public function toArray() {
$vars = get_object_vars($this);
$result = array();
foreach ($vars as $key => $value) {
if (is_object($value)) {
$result[$key] = toArray($value);
} else {
$result[$key] = $value;
}
}
return $result;
}
为了避免每次都重写每个属性名称......
但无论如何我想我只会创建一个包含我需要的变量的数组,这样我就不会触及模型(生成代码)。
答案 0 :(得分:2)
您是否尝试过GetSetMethodNormalizer? http://api.symfony.com/2.0/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.html 防爆。 https://stackoverflow.com/a/6709828/520114
答案 1 :(得分:0)
现在没有办法解决这个问题。只有php serialize / unserialize才能处理对象的真正序列化。
你必须实现它们,或者让对象自己返回它们的json值。
您必须实现自己的方法toArray(),在其中公开数组中的所有私有值:
public function toArray()
{
return array(
'property1' => $this->myproperty1,
'property2' => $this->myproperty2
);
}
并称之为:
json_encode(MyObject->toArray());
[编辑:这个问题不是关于学说,但既然你提到了symfony2和模型,你可以考虑为你的模型使用Array Hydration:http://www.doctrine-project.org/docs/orm/2.0/en/reference/dql-doctrine-query-language.html#array-hydration]