From cc4625a993ccd35dfc631820181e6b3c5081a7b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81ngel=20Garz=C3=B3n?= Date: Fri, 24 Feb 2017 10:27:49 +0000 Subject: [PATCH 1/3] Use default Symfony serializer service when available instead of creating a new one --- DependencyInjection/FOSJsRoutingExtension.php | 2 + .../SerializerCompilerPass.php | 55 ++++++++++++++++ FOSJsRoutingBundle.php | 10 +++ Resources/config/serializer.xml | 23 +++---- .../FOSJsRoutingExtensionTest.php | 4 ++ .../SerializerCompilerPassTest.php | 64 +++++++++++++++++++ 6 files changed, 143 insertions(+), 15 deletions(-) create mode 100644 DependencyInjection/SerializerCompilerPass.php create mode 100644 Tests/DependencyInjection/SerializerCompilerPassTest.php diff --git a/DependencyInjection/FOSJsRoutingExtension.php b/DependencyInjection/FOSJsRoutingExtension.php index 50c12cbb..f536c53b 100644 --- a/DependencyInjection/FOSJsRoutingExtension.php +++ b/DependencyInjection/FOSJsRoutingExtension.php @@ -15,8 +15,10 @@ use Symfony\Component\Config\Definition\Processor; use Symfony\Component\DependencyInjection\Alias; use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Loader\XmlFileLoader; use Symfony\Component\HttpKernel\DependencyInjection\Extension; +use Symfony\Component\Serializer\Serializer; /** * FOSJsRoutingExtension diff --git a/DependencyInjection/SerializerCompilerPass.php b/DependencyInjection/SerializerCompilerPass.php new file mode 100644 index 00000000..8d29b0d4 --- /dev/null +++ b/DependencyInjection/SerializerCompilerPass.php @@ -0,0 +1,55 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace FOS\JsRoutingBundle\DependencyInjection; + +use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; +use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\Serializer\Encoder\JsonEncoder; +use Symfony\Component\Serializer\Serializer; + +/** + * Class SerializerCompilerPass + * + * @author Miguel Angel Garzón + */ +class SerializerCompilerPass implements CompilerPassInterface +{ + const SERIALIZER_SERVICE_ID = 'fos_js_routing.serializer'; + + /** + * @inheritdoc + * @param ContainerBuilder $container + */ + public function process(ContainerBuilder $container) + { + if ($container->hasDefinition(self::SERIALIZER_SERVICE_ID) + || $container->hasAlias(self::SERIALIZER_SERVICE_ID)) { + return; + } + + if ($container->hasDefinition('serializer')) { + $container->setAlias(self::SERIALIZER_SERVICE_ID, 'serializer'); + } else { + $definition = $container->register(self::SERIALIZER_SERVICE_ID, Serializer::class); + $normalizers = [ + $container->getDefinition('fos_js_routing.normalizer.route_collection'), + $container->getDefinition('fos_js_routing.normalizer.routes_response'), + $container->getDefinition('fos_js_routing.denormalizer.route_collection') + ]; + $definition->addArgument($normalizers); + + $encoder = $container->register('fos_js_routing.encoder', JsonEncoder::class); + $encoder->setPublic(false); + $definition->addArgument(['json' => $encoder]); + } + } +} diff --git a/FOSJsRoutingBundle.php b/FOSJsRoutingBundle.php index 2f2ca320..5aa7ecb9 100644 --- a/FOSJsRoutingBundle.php +++ b/FOSJsRoutingBundle.php @@ -11,6 +11,8 @@ namespace FOS\JsRoutingBundle; +use FOS\JsRoutingBundle\DependencyInjection\SerializerCompilerPass; +use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\HttpKernel\Bundle\Bundle; /** @@ -20,4 +22,12 @@ */ class FOSJsRoutingBundle extends Bundle { + /** + * @param ContainerBuilder $container + */ + public function build(ContainerBuilder $container) + { + parent::build($container); + $container->addCompilerPass(new SerializerCompilerPass()); + } } diff --git a/Resources/config/serializer.xml b/Resources/config/serializer.xml index 8b749eaa..0e288cf3 100644 --- a/Resources/config/serializer.xml +++ b/Resources/config/serializer.xml @@ -11,22 +11,15 @@ - - - - - - - - - + + + + + - - - - - - + + + diff --git a/Tests/DependencyInjection/FOSJsRoutingExtensionTest.php b/Tests/DependencyInjection/FOSJsRoutingExtensionTest.php index 7be59dc9..d2188b03 100644 --- a/Tests/DependencyInjection/FOSJsRoutingExtensionTest.php +++ b/Tests/DependencyInjection/FOSJsRoutingExtensionTest.php @@ -12,6 +12,7 @@ namespace FOS\JsRoutingBundle\Tests\DependencyInjection; use FOS\JsRoutingBundle\DependencyInjection\FOSJsRoutingExtension; +use FOS\JsRoutingBundle\DependencyInjection\SerializerCompilerPass; use Symfony\Component\DependencyInjection\ContainerBuilder; class FOSJsRoutingExtensionTest extends \PHPUnit_Framework_TestCase @@ -60,6 +61,9 @@ private function load(array $configs) $extension = new FOSJsRoutingExtension(); $extension->load($configs, $container); + $compilerPass = new SerializerCompilerPass(); + $compilerPass->process($container); + return $container; } } diff --git a/Tests/DependencyInjection/SerializerCompilerPassTest.php b/Tests/DependencyInjection/SerializerCompilerPassTest.php new file mode 100644 index 00000000..54478a07 --- /dev/null +++ b/Tests/DependencyInjection/SerializerCompilerPassTest.php @@ -0,0 +1,64 @@ + + */ +class SerializerCompilerPassTest extends \PHPUnit_Framework_TestCase +{ + public function setUp() + { + if (!class_exists('Symfony\Component\DependencyInjection\ContainerBuilder')) { + $this->markTestSkipped('The DependencyInjection component is not available.'); + } + } + + public function testSerializerInConfig() + { + $container = $this->load([['serializer' => 'test.serializer.service']]); + + $compilerPass = new SerializerCompilerPass(); + $compilerPass->process($container); + + $this->assertTrue($container->hasAlias('fos_js_routing.serializer')); + } + + public function testSerializerDefined() + { + $container = $this->load([]); + + $container->register('serializer', Serializer::class); + + $compilerPass = new SerializerCompilerPass(); + $compilerPass->process($container); + + $this->assertTrue($container->hasAlias('fos_js_routing.serializer')); + } + + public function testSerializerNotDefined() + { + $container = $this->load([]); + + $compilerPass = new SerializerCompilerPass(); + $compilerPass->process($container); + + $this->assertTrue($container->hasDefinition('fos_js_routing.serializer')); + } + + private function load(array $configs) + { + $container = new ContainerBuilder(); + + $extension = new FOSJsRoutingExtension(); + $extension->load($configs, $container); + + return $container; + } +} From 20da0bcd902104d0c071967eb95247e016078d60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81ngel=20Garz=C3=B3n?= Date: Fri, 24 Feb 2017 12:41:22 +0000 Subject: [PATCH 2/3] Fixed PHP 5.3 incompatibilities --- DependencyInjection/FOSJsRoutingExtension.php | 2 -- .../SerializerCompilerPass.php | 20 ++++++++----------- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/DependencyInjection/FOSJsRoutingExtension.php b/DependencyInjection/FOSJsRoutingExtension.php index f536c53b..50c12cbb 100644 --- a/DependencyInjection/FOSJsRoutingExtension.php +++ b/DependencyInjection/FOSJsRoutingExtension.php @@ -15,10 +15,8 @@ use Symfony\Component\Config\Definition\Processor; use Symfony\Component\DependencyInjection\Alias; use Symfony\Component\DependencyInjection\ContainerBuilder; -use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Loader\XmlFileLoader; use Symfony\Component\HttpKernel\DependencyInjection\Extension; -use Symfony\Component\Serializer\Serializer; /** * FOSJsRoutingExtension diff --git a/DependencyInjection/SerializerCompilerPass.php b/DependencyInjection/SerializerCompilerPass.php index 8d29b0d4..71513a6f 100644 --- a/DependencyInjection/SerializerCompilerPass.php +++ b/DependencyInjection/SerializerCompilerPass.php @@ -13,8 +13,6 @@ use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; use Symfony\Component\DependencyInjection\ContainerBuilder; -use Symfony\Component\Serializer\Encoder\JsonEncoder; -use Symfony\Component\Serializer\Serializer; /** * Class SerializerCompilerPass @@ -23,33 +21,31 @@ */ class SerializerCompilerPass implements CompilerPassInterface { - const SERIALIZER_SERVICE_ID = 'fos_js_routing.serializer'; - /** * @inheritdoc * @param ContainerBuilder $container */ public function process(ContainerBuilder $container) { - if ($container->hasDefinition(self::SERIALIZER_SERVICE_ID) - || $container->hasAlias(self::SERIALIZER_SERVICE_ID)) { + if ($container->hasDefinition('fos_js_routing.serializer') + || $container->hasAlias('fos_js_routing.serializer')) { return; } if ($container->hasDefinition('serializer')) { - $container->setAlias(self::SERIALIZER_SERVICE_ID, 'serializer'); + $container->setAlias('fos_js_routing.serializer', 'serializer'); } else { - $definition = $container->register(self::SERIALIZER_SERVICE_ID, Serializer::class); - $normalizers = [ + $definition = $container->register('fos_js_routing.serializer', 'Symfony\Component\Serializer\Serializer'); + $normalizers = array( $container->getDefinition('fos_js_routing.normalizer.route_collection'), $container->getDefinition('fos_js_routing.normalizer.routes_response'), $container->getDefinition('fos_js_routing.denormalizer.route_collection') - ]; + ); $definition->addArgument($normalizers); - $encoder = $container->register('fos_js_routing.encoder', JsonEncoder::class); + $encoder = $container->register('fos_js_routing.encoder', 'Symfony\Component\Serializer\Encoder\JsonEncoder'); $encoder->setPublic(false); - $definition->addArgument(['json' => $encoder]); + $definition->addArgument(array('json' => $encoder)); } } } From 0d1b1af839823e5424bd14a01b0b27352fb84e2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81ngel=20Garz=C3=B3n?= Date: Fri, 24 Feb 2017 12:47:48 +0000 Subject: [PATCH 3/3] Fixed PHP 5.3 incompatibilities in test class --- Tests/DependencyInjection/SerializerCompilerPassTest.php | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Tests/DependencyInjection/SerializerCompilerPassTest.php b/Tests/DependencyInjection/SerializerCompilerPassTest.php index 54478a07..9fbd39f4 100644 --- a/Tests/DependencyInjection/SerializerCompilerPassTest.php +++ b/Tests/DependencyInjection/SerializerCompilerPassTest.php @@ -4,7 +4,6 @@ use FOS\JsRoutingBundle\DependencyInjection\FOSJsRoutingExtension; use FOS\JsRoutingBundle\DependencyInjection\SerializerCompilerPass; use Symfony\Component\DependencyInjection\ContainerBuilder; -use Symfony\Component\Serializer\Serializer; /** * Class SerializerCompilerPassTest @@ -22,7 +21,7 @@ public function setUp() public function testSerializerInConfig() { - $container = $this->load([['serializer' => 'test.serializer.service']]); + $container = $this->load(array(array('serializer' => 'test.serializer.service'))); $compilerPass = new SerializerCompilerPass(); $compilerPass->process($container); @@ -32,9 +31,9 @@ public function testSerializerInConfig() public function testSerializerDefined() { - $container = $this->load([]); + $container = $this->load(array()); - $container->register('serializer', Serializer::class); + $container->register('serializer', 'Symfony\Component\Serializer\Serializer'); $compilerPass = new SerializerCompilerPass(); $compilerPass->process($container); @@ -44,7 +43,7 @@ public function testSerializerDefined() public function testSerializerNotDefined() { - $container = $this->load([]); + $container = $this->load(array()); $compilerPass = new SerializerCompilerPass(); $compilerPass->process($container);