Сущностный объект в массив

Я пытаюсь преобразовать объект в ассоциативный массив.
Похоже, что метод toArray() недоступен для объектов объектов.

Читая документацию по Symfony, кажется, что мне следует использовать SerializerInterface.
После его включения я не могу найти правильный синтаксис для преобразования моей сущности в ассоциативный массив.

Может кто-нибудь исправить мой код, пожалуйста?

use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\SerializerInterface;

// -----------------------

public function salleAction(Request $request, Projet $projet, SerializerInterface $serializer) {
    return this->json(array(
        'projet'=>$serializer->serialize($projet, new ObjectNormalizer())
    ));
}

С приведенным выше кодом я получаю это сообщение об ошибке

Предупреждение: недопустимый тип смещения в isset или пустой

Если я заменю new ObjectNormalizer() на 'jsons', я получу следующее сообщение об ошибке:

Обнаружена циклическая ссылка при сериализации объекта класса "AppBundle\Entity\Projet" (настроенное ограничение: 1)


person Preciel    schedule 07.02.2019    source источник


Ответы (1)


Я предлагаю вам добавить следующий метод к объекту, который необходимо преобразовать

public function toArray()
{
    return get_object_vars($this);
}

и использовать его везде $array = $projet->toArray();

person Lunin Roman    schedule 07.02.2019
comment
Работает, но что-то не так. Во-первых, Datetime и свойства на стороне-владельце (отношения сущностей) являются объектами, а не простым значением. Во-вторых, свойства на обратной стороне включены как объект emtpy, я бы хотел их исключить. Можно ли это исправить? - person Preciel; 08.02.2019
comment
это всего лишь базовый пример, вы можете настроить этот метод под свои конкретные нужды, поэтому я предложил привязать метод к сущности, потому что метод специфичен для каждого конкретного случая. - person Lunin Roman; 08.02.2019