ReferenceManger.php 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: loconox
  5. * Date: 14/06/2017
  6. * Time: 15:17
  7. */
  8. namespace AppBundle\Entity;
  9. use AppBundle\Serializer\DateDenormalizer;
  10. use Doctrine\Common\Collections\ArrayCollection;
  11. use Doctrine\ORM\EntityRepository;
  12. use Doctrine\ORM\Mapping\ClassMetadata;
  13. use Symfony\Component\PropertyInfo\Extractor\PhpDocExtractor;
  14. use Symfony\Component\Serializer\Encoder\YamlEncoder;
  15. use Symfony\Component\Serializer\Normalizer\ArrayDenormalizer;
  16. use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
  17. use Symfony\Component\Serializer\Serializer;
  18. use Symfony\Component\Yaml\Yaml;
  19. class ReferenceManger extends EntityRepository
  20. {
  21. /**
  22. * @var Serializer
  23. */
  24. protected $serializer;
  25. /**
  26. * @var Reference[]
  27. */
  28. protected $references;
  29. public function __construct($em, ClassMetadata $class)
  30. {
  31. parent::__construct($em, $class);
  32. $normalizers = [
  33. new DateDenormalizer(),
  34. new ObjectNormalizer(null, null, null, new PhpDocExtractor()),
  35. new ArrayDenormalizer(),
  36. ];
  37. $encoders = [
  38. new YamlEncoder(
  39. null,
  40. null,
  41. [
  42. 'yaml_flags' => Yaml::PARSE_OBJECT_FOR_MAP,
  43. 'yaml_inline' => 2,
  44. ]
  45. ),
  46. ];
  47. $this->serializer = new Serializer($normalizers, $encoders);
  48. }
  49. public function persist(Reference $reference)
  50. {
  51. $this->_em->persist($reference);
  52. $this->_em->flush();
  53. }
  54. public function remove(Reference $reference)
  55. {
  56. $this->_em->remove($reference);
  57. $this->_em->flush();
  58. }
  59. public function loadFromFile($filename)
  60. {
  61. $data = file_get_contents($filename);
  62. /** @var References $references */
  63. $references = $this->serializer->deserialize($data, 'AppBundle\\Entity\\References', 'yaml');
  64. foreach ($references->references as $reference) {
  65. $this->_em->persist($reference);
  66. }
  67. $this->_em->flush();
  68. }
  69. public function dumpYAML()
  70. {
  71. $references = $this->findAll();
  72. $references = new References($references);
  73. return $this->serializer->serialize($references, 'yaml');
  74. }
  75. public function serialize($data, $format)
  76. {
  77. return $this->serializer->serialize($data, $format);
  78. }
  79. }