Skip to content

Commit

Permalink
Add support for the UID handler
Browse files Browse the repository at this point in the history
  • Loading branch information
mbabker committed Feb 9, 2022
1 parent 914eb5d commit 103297f
Show file tree
Hide file tree
Showing 6 changed files with 36 additions and 0 deletions.
8 changes: 8 additions & 0 deletions DependencyInjection/Configuration.php
Expand Up @@ -68,6 +68,14 @@ private function addHandlersSection(NodeBuilder $builder)
->booleanNode('initialize_excluded')->defaultFalse()->end()
->end()
->end()
->arrayNode('uid')
->addDefaultsIfNotSet()
->children()
->scalarNode('default_format')->defaultValue('canonical')->end() // Same as JMS\Serializer\Handler\UidHandler::FORMAT_CANONICAL
->scalarNode('cdata')->defaultTrue()->end()
->end()
->end()
->end()
->end()
->end();
}
Expand Down
9 changes: 9 additions & 0 deletions DependencyInjection/JMSSerializerExtension.php
Expand Up @@ -7,6 +7,7 @@
use JMS\Serializer\EventDispatcher\EventSubscriberInterface;
use JMS\Serializer\Exception\RuntimeException;
use JMS\Serializer\Handler\SubscribingHandlerInterface;
use JMS\Serializer\Handler\UidHandler;
use JMS\Serializer\Metadata\Driver\AttributeDriver\AttributeReader;
use JMS\Serializer\Metadata\Driver\DocBlockDriver;
use JMS\Serializer\Metadata\Driver\TypedPropertiesDriver;
Expand Down Expand Up @@ -49,6 +50,14 @@ public function loadInternal(array $config, ContainerBuilder $container)
$container->getDefinition('jms_serializer.array_collection_handler')
->replaceArgument(0, $config['handlers']['array_collection']['initialize_excluded']);

if (class_exists(UidHandler::class)) {
$container->getDefinition('jms_serializer.uid_handler')
->addArgument($config['handlers']['uid']['default_format'])
->addArgument($config['handlers']['uid']['cdata']);
} else {
$container->removeDefinition('jms_serializer.uid_handler');
}

// Built-in subscribers.
$container->getDefinition('jms_serializer.doctrine_proxy_subscriber')
->replaceArgument(0, !$config['subscribers']['doctrine_proxy']['initialize_virtual_types'])
Expand Down
3 changes: 3 additions & 0 deletions Resources/config/services.xml
Expand Up @@ -69,6 +69,9 @@
<service id="jms_serializer.iterator_handler" class="JMS\Serializer\Handler\IteratorHandler" public="false">
<tag name="jms_serializer.subscribing_handler" />
</service>
<service id="jms_serializer.uid_handler" class="JMS\Serializer\Handler\UidHandler" public="false">
<tag name="jms_serializer.subscribing_handler" />
</service>

<!-- Metadata Drivers -->
<service id="jms_serializer.type_parser" class="JMS\Serializer\Type\Parser" public="false"/>
Expand Down
3 changes: 3 additions & 0 deletions Resources/doc/configuration.rst
Expand Up @@ -171,6 +171,9 @@ values:
default_timezone: "UTC" # defaults to whatever timezone set in php.ini or via date_default_timezone_set
array_collection:
initialize_excluded: false
uid:
default_format: "canonical"
cdata: true
subscribers:
doctrine_proxy:
Expand Down
9 changes: 9 additions & 0 deletions Tests/DependencyInjection/ConfigurationTest.php
Expand Up @@ -253,6 +253,15 @@ public function testDefaultDateFormat()
$this->assertEquals(\DateTime::ATOM, $config['handlers']['datetime']['default_format']);
}

public function testDefaultUidFormat()
{
$processor = new Processor();
$config = $processor->processConfiguration(new Configuration(true), []);

// Same as JMS\Serializer\Handler\UidHandler::FORMAT_CANONICAL
$this->assertEquals('canonical', $config['handlers']['uid']['default_format']);
}

public function testJsonSerializationVisitorDefaultOptions()
{
$processor = new Processor();
Expand Down
4 changes: 4 additions & 0 deletions composer.json
Expand Up @@ -37,6 +37,7 @@
"symfony/stopwatch": "^3.0 || ^4.0 || ^5.0 || ^6.0",
"symfony/templating": "^3.0 || ^4.0 || ^5.0 || ^6.0",
"symfony/twig-bundle": "^3.0 || ^4.0 || ^5.0 || ^6.0",
"symfony/uid": "^5.1 || ^6.0",
"symfony/validator": "^3.0 || ^4.0 || ^5.0 || ^6.0",
"symfony/yaml": "^3.0 || ^4.0 || ^5.0 || ^6.0"
},
Expand All @@ -46,6 +47,9 @@
"symfony/finder": "Required for cache warmup, supported versions ^3.0|^4.0"
},
"config": {
"allow-plugins": {
"dealerdirect/phpcodesniffer-composer-installer": true
},
"sort-packages": true
},
"extra": {
Expand Down

0 comments on commit 103297f

Please sign in to comment.