Я разрабатываю приложение, которое наследует абстрактные классы. Эти абстрактные классы имеют собственное отображение для сериализатора, как показано в примере ниже.
Hezten\CoreBundle\Model\Enroled:
exclusion_policy: ALL
И абстрактный класс:
<?php
namespace Hezten\CoreBundle\Model;
abstract class Enroled implements EnroledInterface
{
protected $student;
protected $subject;
//Some functions...
}
Класс, который наследует предыдущий класс, выглядит следующим образом
<?php
namespace XXX\XXXBundle\Entity;
use JMS\Serializer\Annotation\SerializedName;
use JMS\Serializer\Annotation\ExclusionPolicy;
use JMS\Serializer\Annotation\Exclude;
use Doctrine\ORM\Mapping as ORM;
use Hezten\CoreBundle\Model\Enroled as BaseEnroled;
/**
* @ORM\Entity
* @ExclusionPolicy("NONE")
*/
class Enroled extends BaseEnroled
{
/** @ORM\Id
* @ORM\ManyToOne(targetEntity="XXX\XXXBundle\Entity\Student", inversedBy="enroled")
* @Exclude
*/
protected $student;
/** @ORM\Id
* @ORM\ManyToOne(targetEntity="XXX\XXXBundle\Entity\Subject", inversedBy="enroled")
* @Exclude
*/
protected $subject;
/** @ORM\Column(type="boolean") */
private $field0;
/** @ORM\Column(type="boolean")
*/
private $field1;
/** @ORM\Column(type="boolean") */
private $field2;
}
Выброшенная ошибка говорит об этом:
Warning: json_encode() [<a href='function.json-encode'>function.json-encode</a>]: recursion detected in C:\xampp\htdocs\Project\vendor\jms\serializer\src\JMS\Serializer\JsonSerializationVisitor.php line 29
Наверняка я делаю что-то не так, так как никакие объекты не выставляются, только три поля объекта «Зарегистрировано» в соответствии с сопоставлениями, но я понятия не имею. Я потратил пару дней, пытаясь понять, в чем ошибка, но безуспешно.
Каков правильный способ сопоставления унаследованных свойств?
Обновить
Код, используемый для сериализации JSON с помощью FOSRestBundle:
$students = $this->get('hezten_core.manager.enroled')->findEnroledBySubject($subject);
$view = View::create()
->setStatusCode(200)
->setFormat('json')
->setData($students);
return $this->get('fos_rest.view_handler')->handle($view);
@ExclusionPolicy
на"none"
вместо"NONE"
, чтобы соответствовать значениям документации... но я не думаю, что это все. jmsyst.com/libs/serializer/master/reference/ - person Nicolai Fröhlich   schedule 17.07.2013Enroled
, сериализатор работает как положено... Я что-то упускаю... - person Gorka Lauzirika   schedule 18.07.2013