Symfony 2/Php:json_encode

Symfony 2/Php:json_encode,php,ajax,json,symfony,Php,Ajax,Json,Symfony,我一直在寻找一个解决我的问题的办法,但没有成功,所以我在这里问 我们如何在包含私有属性的对象数组(或仅一个对象)上返回json编码的结果 事实上,当您使用json_encode($myObject)时,它不会显示私有或受保护的属性,这些属性在使用Symfony时在模型中无处不在 我很惊讶,我找不到任何像json_encode这样的方法来调用getter而不是属性本身 有什么想法吗 编辑 在这种情况下,我宁愿执行一个独特的函数,如下所示: public function toArray() {

我一直在寻找一个解决我的问题的办法,但没有成功,所以我在这里问

我们如何在包含私有属性的对象数组(或仅一个对象)上返回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;
}
为了避免每次都重写每个属性名


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

现在没有办法做到这一点。只有php serialize/unserialize处理对象的真正序列化

您必须自己实现它们,或者让对象自己返回json值

您必须实现自己的方法toArray(),在该方法中,您将在一个数组中公开所有私有值:

public function toArray()
{
  return array(
      'property1' => $this->myproperty1,
      'property2' => $this->myproperty2
  );
}
这样称呼它:

json_encode(MyObject->toArray());

<强> >编辑:< /强>这个问题不是关于教义的,但是既然你提到了SimFyY2和模型,你可以考虑使用数组水合你的模型:[P/P>P>你试过GetSetMethodNormalizer吗?
例如。

在尝试调用时收到一条消息“调用未定义的方法toArray”。抱歉,在解释中添加了一点。好吧,当您必须对每个模型(具有许多属性)执行此操作时,这不是很方便……是的,这是真的,但这是PHP的一个限制。如果只需要通过json发送,请查看我粘贴的数组。这是通用的PHP解决方案。对于doctrine,可能有更好的解决方案。当使用json_encode()时,PHP5.4将在对象中支持toJSON()方法。Zend框架的Zend_Json::encode()方法支持对象的toJson()方法,但仅限于一个级别。因此不支持嵌套对象结构,因此无法序列化对象数组。请使用标题字段描述您的问题。