bug #34144 [Serializer] Improve messages for unexpected resources values (fancyweb)
This PR was merged into the 3.4 branch.
Discussion
----------
[Serializer] Improve messages for unexpected resources values
| Q | A
| ------------- | ---
| Branch? | 3.4
| Bug fix? | no
| New feature? | no
| Deprecations? | no
| Tickets | -
| License | MIT
| Doc PR | -
Before: `An unexpected value could not be serialized: NULL` - very misleading
After: `An unexpected value could not be serialized: a "stream" resource`
Commits
-------
ad2ce276c7
[Serializer] Improve messages for unexpected resources values
This commit is contained in:
commit
1a92f44a33
@ -426,7 +426,7 @@ class XmlEncoder extends SerializerAwareEncoder implements EncoderInterface, Dec
|
|||||||
return $this->appendNode($parentNode, $data, 'data');
|
return $this->appendNode($parentNode, $data, 'data');
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new NotEncodableValueException(sprintf('An unexpected value could not be serialized: %s', var_export($data, true)));
|
throw new NotEncodableValueException(sprintf('An unexpected value could not be serialized: %s', !\is_resource($data) ? var_export($data, true) : sprintf('%s resource', get_resource_type($data))));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -164,7 +164,7 @@ class Serializer implements SerializerInterface, NormalizerInterface, Denormaliz
|
|||||||
throw new NotNormalizableValueException(sprintf('Could not normalize object of type %s, no supporting normalizer found.', \get_class($data)));
|
throw new NotNormalizableValueException(sprintf('Could not normalize object of type %s, no supporting normalizer found.', \get_class($data)));
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new NotNormalizableValueException(sprintf('An unexpected value could not be normalized: %s', var_export($data, true)));
|
throw new NotNormalizableValueException(sprintf('An unexpected value could not be normalized: %s', !\is_resource($data) ? var_export($data, true) : sprintf('%s resource', get_resource_type($data))));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -14,6 +14,7 @@ namespace Symfony\Component\Serializer\Tests\Encoder;
|
|||||||
use PHPUnit\Framework\MockObject\MockObject;
|
use PHPUnit\Framework\MockObject\MockObject;
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
use Symfony\Component\Serializer\Encoder\XmlEncoder;
|
use Symfony\Component\Serializer\Encoder\XmlEncoder;
|
||||||
|
use Symfony\Component\Serializer\Exception\NotEncodableValueException;
|
||||||
use Symfony\Component\Serializer\Normalizer\CustomNormalizer;
|
use Symfony\Component\Serializer\Normalizer\CustomNormalizer;
|
||||||
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
|
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
|
||||||
use Symfony\Component\Serializer\Serializer;
|
use Symfony\Component\Serializer\Serializer;
|
||||||
@ -679,6 +680,14 @@ XML;
|
|||||||
$this->assertEquals($this->createXmlWithDateTimeField(), $actualXml);
|
$this->assertEquals($this->createXmlWithDateTimeField(), $actualXml);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testNotEncodableValueExceptionMessageForAResource()
|
||||||
|
{
|
||||||
|
$this->expectException(NotEncodableValueException::class);
|
||||||
|
$this->expectExceptionMessage('An unexpected value could not be serialized: stream resource');
|
||||||
|
|
||||||
|
(new XmlEncoder())->encode(tmpfile(), 'xml');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return XmlEncoder
|
* @return XmlEncoder
|
||||||
*/
|
*/
|
||||||
|
@ -13,6 +13,7 @@ namespace Symfony\Component\Serializer\Tests;
|
|||||||
|
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
use Symfony\Component\Serializer\Encoder\JsonEncoder;
|
use Symfony\Component\Serializer\Encoder\JsonEncoder;
|
||||||
|
use Symfony\Component\Serializer\Exception\NotNormalizableValueException;
|
||||||
use Symfony\Component\Serializer\Normalizer\ArrayDenormalizer;
|
use Symfony\Component\Serializer\Normalizer\ArrayDenormalizer;
|
||||||
use Symfony\Component\Serializer\Normalizer\CustomNormalizer;
|
use Symfony\Component\Serializer\Normalizer\CustomNormalizer;
|
||||||
use Symfony\Component\Serializer\Normalizer\DenormalizerAwareInterface;
|
use Symfony\Component\Serializer\Normalizer\DenormalizerAwareInterface;
|
||||||
@ -328,6 +329,14 @@ class SerializerTest extends TestCase
|
|||||||
|
|
||||||
$this->assertEquals(new Foo(new Bar('baz')), $serializer->deserialize($jsonData, Foo::class, 'json'));
|
$this->assertEquals(new Foo(new Bar('baz')), $serializer->deserialize($jsonData, Foo::class, 'json'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testNotNormalizableValueExceptionMessageForAResource()
|
||||||
|
{
|
||||||
|
$this->expectException(NotNormalizableValueException::class);
|
||||||
|
$this->expectExceptionMessage('An unexpected value could not be normalized: stream resource');
|
||||||
|
|
||||||
|
(new Serializer())->normalize(tmpfile());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class Model
|
class Model
|
||||||
|
Reference in New Issue
Block a user