Moved the NormalizationAwareInterface check to the ChainEncoder
This allows nesting a ChainEncoder inside another one without breaking the check.
This commit is contained in:
parent
28e137c920
commit
12bdec3cd2
@ -12,6 +12,7 @@
|
|||||||
namespace Symfony\Component\Serializer\Encoder;
|
namespace Symfony\Component\Serializer\Encoder;
|
||||||
|
|
||||||
use Symfony\Component\Serializer\Encoder\EncoderInterface;
|
use Symfony\Component\Serializer\Encoder\EncoderInterface;
|
||||||
|
use Symfony\Component\Serializer\Encoder\NormalizationAwareInterface;
|
||||||
use Symfony\Component\Serializer\Exception\RuntimeException;
|
use Symfony\Component\Serializer\Exception\RuntimeException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -53,6 +54,28 @@ class ChainEncoder implements EncoderInterface
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether the normalization is needed for the given format.
|
||||||
|
*
|
||||||
|
* @param string $format
|
||||||
|
*
|
||||||
|
* @return Boolean
|
||||||
|
*/
|
||||||
|
public function needsNormalization($format)
|
||||||
|
{
|
||||||
|
$encoder = $this->getEncoder($format);
|
||||||
|
|
||||||
|
if (!$encoder instanceof NormalizationAwareInterface) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($encoder instanceof self) {
|
||||||
|
return $encoder->needsNormalization($format);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the encoder supporting the format.
|
* Gets the encoder supporting the format.
|
||||||
*
|
*
|
||||||
@ -61,7 +84,7 @@ class ChainEncoder implements EncoderInterface
|
|||||||
* @return EncoderInterface
|
* @return EncoderInterface
|
||||||
* @throws RuntimeException if no encoder is found
|
* @throws RuntimeException if no encoder is found
|
||||||
*/
|
*/
|
||||||
public function getEncoder($format)
|
private function getEncoder($format)
|
||||||
{
|
{
|
||||||
if (isset($this->encoderByFormat[$format])
|
if (isset($this->encoderByFormat[$format])
|
||||||
&& isset($this->encoders[$this->encoderByFormat[$format]])
|
&& isset($this->encoders[$this->encoderByFormat[$format]])
|
||||||
|
@ -15,7 +15,6 @@ use Symfony\Component\Serializer\Encoder\ChainDecoder;
|
|||||||
use Symfony\Component\Serializer\Encoder\ChainEncoder;
|
use Symfony\Component\Serializer\Encoder\ChainEncoder;
|
||||||
use Symfony\Component\Serializer\Encoder\EncoderInterface;
|
use Symfony\Component\Serializer\Encoder\EncoderInterface;
|
||||||
use Symfony\Component\Serializer\Encoder\DecoderInterface;
|
use Symfony\Component\Serializer\Encoder\DecoderInterface;
|
||||||
use Symfony\Component\Serializer\Encoder\NormalizationAwareInterface;
|
|
||||||
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
|
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
|
||||||
use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
|
use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
|
||||||
use Symfony\Component\Serializer\Exception\RuntimeException;
|
use Symfony\Component\Serializer\Exception\RuntimeException;
|
||||||
@ -41,11 +40,8 @@ class Serializer implements SerializerInterface, NormalizerInterface, Denormaliz
|
|||||||
protected $encoder;
|
protected $encoder;
|
||||||
protected $decoder;
|
protected $decoder;
|
||||||
protected $normalizers = array();
|
protected $normalizers = array();
|
||||||
protected $encoders = array();
|
|
||||||
protected $normalizerCache = array();
|
protected $normalizerCache = array();
|
||||||
protected $denormalizerCache = array();
|
protected $denormalizerCache = array();
|
||||||
protected $encoderByFormat = array();
|
|
||||||
protected $decoderByFormat = array();
|
|
||||||
|
|
||||||
public function __construct(array $normalizers = array(), array $encoders = array())
|
public function __construct(array $normalizers = array(), array $encoders = array())
|
||||||
{
|
{
|
||||||
@ -82,9 +78,7 @@ class Serializer implements SerializerInterface, NormalizerInterface, Denormaliz
|
|||||||
throw new UnexpectedValueException('Serialization for the format '.$format.' is not supported');
|
throw new UnexpectedValueException('Serialization for the format '.$format.' is not supported');
|
||||||
}
|
}
|
||||||
|
|
||||||
$encoder = $this->encoder->getEncoder($format);
|
if ($this->encoder->needsNormalization($format)) {
|
||||||
|
|
||||||
if (!$encoder instanceof NormalizationAwareInterface) {
|
|
||||||
$data = $this->normalize($data, $format);
|
$data = $this->normalize($data, $format);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user