Symfony 2 / Php: json_encode - PullRequest
       2

Symfony 2 / Php: json_encode

1 голос
/ 05 декабря 2011

Я некоторое время безуспешно искал решение своей проблемы, поэтому спрашиваю здесь.

Как мы можем вернуть кодированный в json результат для массива объектов (или простообъект), содержащий приватные свойства?

Действительно, когда вы используете json_encode ($ myObject), он не будет отображать приватные или защищенные свойства, которые присутствуют везде в модели при использовании Symfony ...

Я удивлен, что не смог найти такой метод, как json_encode, который бы вызывал геттеры вместо самих свойств.

Есть идеи?

EDIT

В этом случаеЯ бы предпочел сделать уникальную функцию, которая выглядит следующим образом:

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 ]

2 голосов
/ 05 декабря 2011
0 голосов
/ 05 декабря 2011

Прямо сейчас для этого нет пути. Только 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 ]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...