CircularReferenceParent.php 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. <?php
  2. namespace JMS\Serializer\Tests\Fixtures;
  3. use Doctrine\Common\Collections\ArrayCollection;
  4. use JMS\Serializer\Annotation\PostDeserialize;
  5. use JMS\Serializer\Annotation\Type;
  6. /** No annotation */
  7. class CircularReferenceParent
  8. {
  9. /** @Type("array<JMS\Serializer\Tests\Fixtures\CircularReferenceChild>") */
  10. protected $collection = array();
  11. /** @Type("ArrayCollection<JMS\Serializer\Tests\Fixtures\CircularReferenceChild>") */
  12. private $anotherCollection;
  13. public function __construct()
  14. {
  15. $this->collection[] = new CircularReferenceChild('child1', $this);
  16. $this->collection[] = new CircularReferenceChild('child2', $this);
  17. $this->anotherCollection = new ArrayCollection();
  18. $this->anotherCollection->add(new CircularReferenceChild('child1', $this));
  19. $this->anotherCollection->add(new CircularReferenceChild('child2', $this));
  20. }
  21. /** @PostDeserialize */
  22. private function afterDeserialization()
  23. {
  24. if (!$this->collection) {
  25. $this->collection = array();
  26. }
  27. foreach ($this->collection as $v) {
  28. $v->setParent($this);
  29. }
  30. if (!$this->anotherCollection) {
  31. $this->anotherCollection = new ArrayCollection();
  32. }
  33. foreach ($this->anotherCollection as $v) {
  34. $v->setParent($this);
  35. }
  36. }
  37. }