Symfony 2 / Php:json_encode

时间:2011-12-05 14:53:37

标签: php ajax json symfony

我一直在寻找解决我问题的方法一段时间没有成功,所以我在这里问。

如何在包含私有属性的对象数组(或只是对象)上返回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;
}

为了避免每次都重写每个属性名称......

但无论如何我想我只会创建一个包含我需要的变量的数组,这样我就不会触及模型(生成代码)。

2 个答案:

答案 0 :(得分:2)

答案 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]