a05379eab0
This PR was merged into the 2.6-dev branch.
Discussion
----------
[Serializer] Handle circular references
| Q | A
| ------------- | ---
| Bug fix? | Yes: avoid infinite loops. Allows to improve #5347
| New feature? | yes (circular reference handler)
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| License | MIT
| Doc PR | symfony/symfony-docs#4299
This PR adds handling of circular references in the `Serializer` component.
The number of allowed iterations is configurable (one by default).
The behavior when a circular reference is detected is configurable. By default an exception is thrown. Instead of throwing an exception, it's possible to register a custom handler (e.g.: a Doctrine Handler returning the object ID).
Usage:
```php
use Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer;
use Symfony\Component\Serializer\Serializer;
class MyObj
{
private $id = 1312;
public function getId()
{
return $this->getId();
}
public function getMe()
{
return $this;
}
}
$normalizer = new GetSetMethodNormalizer();
$normalizer->setCircularReferenceLimit(3);
$normalizer->setCircularReferenceHandler(function ($obj) {
return $obj->getId();
});
$serializer = new Serializer([$normalizer]);
$serializer->normalize(new MyObj());
```
Commits
-------
|
||
---|---|---|
.. | ||
Encoder | ||
Exception | ||
Normalizer | ||
Tests | ||
.gitignore | ||
CHANGELOG.md | ||
composer.json | ||
LICENSE | ||
phpunit.xml.dist | ||
README.md | ||
Serializer.php | ||
SerializerAwareInterface.php | ||
SerializerInterface.php |
Serializer Component
With the Serializer component its possible to handle serializing data structures, including object graphs, into array structures or other formats like XML and JSON. It can also handle deserializing XML and JSON back to object graphs.
Resources
You can run the unit tests with the following command:
$ cd path/to/Symfony/Component/Serializer/
$ composer.phar install
$ phpunit