NormalizableObjectNormalizer.php 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. <?php
  2. namespace JMS\SerializerBundle\Serializer\Normalizer;
  3. use JMS\SerializerBundle\Serializer\InstanceCreatorInterface;
  4. use JMS\SerializerBundle\Exception\UnsupportedException;
  5. class NormalizableObjectNormalizer extends SerializerAwareNormalizer
  6. {
  7. private $instanceCreator;
  8. public function __construct(InstanceCreatorInterface $instanceCreator)
  9. {
  10. $this->instanceCreator = $instanceCreator;
  11. }
  12. public function normalize($data, $format = null)
  13. {
  14. if (!$data instanceof NormalizableInterface) {
  15. throw new UnsupportedException('$data does not implement NormalizableInterface.');
  16. }
  17. return $data->normalize($this->serializer, $format);
  18. }
  19. public function denormalize($data, $type, $format = null)
  20. {
  21. $refl = new \ReflectionClass($type);
  22. if (!$refl->isSubclassOf('JMS\SerializerBundle\Serializer\Normalizer\NormalizableInterface')) {
  23. throw new UnsupportedException('$type does not implement NormalizableInterface.');
  24. }
  25. $object = $this->instanceCreator->createInstance($refl);
  26. $object->denormalize($this->serializer, $data, $format);
  27. return $object;
  28. }
  29. public function supportsNormalization($data, $format = null)
  30. {
  31. return $data instanceof NormalizableInterface;
  32. }
  33. public function supportsDenormalization($data, $type, $format = null)
  34. {
  35. $refl = new \ReflectionClass($type);
  36. return $refl->isSubclassOf('JMS\SerializerBundle\Serializer\Normalizer\NormalizableInterface');
  37. }
  38. }