bug #19352 [Serializer] Include the format in the cache key (dunglas)
This PR was squashed before being merged into the 3.1 branch (closes #19352).
Discussion
----------
[Serializer] Include the format in the cache key
| Q | A
| ------------- | ---
| Branch? | 3.1
| Bug fix? | yes
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | n/a
| License | MIT
| Doc PR | n/a
Attributes to normalize can vary by format. For instance in API Platform normalized attributes aren't the same in JSON-LD (all attributes) and HAL (relations are not serialized in the document body).
This PR fixes that.
Commits
-------
282eb9c
[Serializer] Include the format in the cache key
This commit is contained in:
commit
cf691fb51f
@ -56,7 +56,7 @@ abstract class AbstractObjectNormalizer extends AbstractNormalizer
|
|||||||
public function normalize($object, $format = null, array $context = array())
|
public function normalize($object, $format = null, array $context = array())
|
||||||
{
|
{
|
||||||
if (!isset($context['cache_key'])) {
|
if (!isset($context['cache_key'])) {
|
||||||
$context['cache_key'] = $this->getCacheKey($context);
|
$context['cache_key'] = $this->getCacheKey($format, $context);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->isCircularReference($object, $context)) {
|
if ($this->isCircularReference($object, $context)) {
|
||||||
@ -169,7 +169,7 @@ abstract class AbstractObjectNormalizer extends AbstractNormalizer
|
|||||||
public function denormalize($data, $class, $format = null, array $context = array())
|
public function denormalize($data, $class, $format = null, array $context = array())
|
||||||
{
|
{
|
||||||
if (!isset($context['cache_key'])) {
|
if (!isset($context['cache_key'])) {
|
||||||
$context['cache_key'] = $this->getCacheKey($context);
|
$context['cache_key'] = $this->getCacheKey($format, $context);
|
||||||
}
|
}
|
||||||
$allowedAttributes = $this->getAllowedAttributes($class, $context, true);
|
$allowedAttributes = $this->getAllowedAttributes($class, $context, true);
|
||||||
$normalizedData = $this->prepareForDenormalization($data);
|
$normalizedData = $this->prepareForDenormalization($data);
|
||||||
@ -336,14 +336,15 @@ abstract class AbstractObjectNormalizer extends AbstractNormalizer
|
|||||||
/**
|
/**
|
||||||
* Gets the cache key to use.
|
* Gets the cache key to use.
|
||||||
*
|
*
|
||||||
* @param array $context
|
* @param string|null $format
|
||||||
|
* @param array $context
|
||||||
*
|
*
|
||||||
* @return bool|string
|
* @return bool|string
|
||||||
*/
|
*/
|
||||||
private function getCacheKey(array $context)
|
private function getCacheKey($format, array $context)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
return md5(serialize($context));
|
return md5($format.serialize($context));
|
||||||
} catch (\Exception $exception) {
|
} catch (\Exception $exception) {
|
||||||
// The context cannot be serialized, skip the cache
|
// The context cannot be serialized, skip the cache
|
||||||
return false;
|
return false;
|
||||||
|
Reference in New Issue
Block a user