diff --git a/DependencyInjection/IvoryGoogleMapExtension.php b/DependencyInjection/IvoryGoogleMapExtension.php index 80de514f..4e2b0bbe 100644 --- a/DependencyInjection/IvoryGoogleMapExtension.php +++ b/DependencyInjection/IvoryGoogleMapExtension.php @@ -114,10 +114,28 @@ private function loadServicesConfig(array $config, ContainerBuilder $container, 'time_zone' => true, ]; + $serializerLoaded = false; + $loadSerializer = function() use ($container, $loader) { + $loader->load('service/serializer.xml'); + + if ($container->hasParameter('kernel.project_dir')) { + $container + ->getDefinition('ivory.google_map.serializer.loader') + ->replaceArgument(0, '%kernel.project_dir%/vendor/ivory/google-map/src/Service/Serializer'); + } + }; + foreach ($services as $service => $http) { - if (isset($config[$service])) { - $this->loadServiceConfig($service, $config[$service], $container, $loader, $http); + if (!isset($config[$service])) { + continue; } + + if ($http && !$serializerLoaded) { + $loadSerializer(); + $serializerLoaded = true; + } + + $this->loadServiceConfig($service, $config[$service], $container, $loader, $http); } } @@ -139,8 +157,6 @@ private function loadServiceConfig( $definition = $container->getDefinition($serviceName = 'ivory.google_map.'.$service); if ($http) { - $loader->load('service/serializer.xml'); - $definition ->addArgument(new Reference($config['client'])) ->addArgument(new Reference($config['message_factory'])) diff --git a/Tests/DependencyInjection/AbstractIvoryGoogleMapExtensionTest.php b/Tests/DependencyInjection/AbstractIvoryGoogleMapExtensionTest.php index cb63d42f..6cdf3efd 100644 --- a/Tests/DependencyInjection/AbstractIvoryGoogleMapExtensionTest.php +++ b/Tests/DependencyInjection/AbstractIvoryGoogleMapExtensionTest.php @@ -76,6 +76,7 @@ protected function setUp() { $this->container = new ContainerBuilder(); $this->container->setParameter('kernel.root_dir', __DIR__.'/..'); + $this->container->setParameter('kernel.project_dir', realpath(__DIR__.'/../..')); $this->container->setParameter('kernel.debug', $this->debug = false); $this->container->setParameter('locale', $this->locale = 'en'); $this->container->set('httplug.client', $this->client = $this->createClientMock()); @@ -274,6 +275,7 @@ public function testDirection() $this->assertSame($this->serializer, $direction->getSerializer()); $this->assertSame(DirectionService::FORMAT_JSON, $direction->getFormat()); $this->assertFalse($direction->hasBusinessAccount()); + self::assertTrue($this->container->has('ivory.google_map.serializer.loader')); } public function testDirectionFormat()