diff --git a/src/DynamicEntityReferenceServiceProvider.php b/src/DynamicEntityReferenceServiceProvider.php index 1b7b6357e2f8b491b4b85b206c4b69f3f969c633..338038cfd4d0c7b8954957287718ccacd89361e1 100644 --- a/src/DynamicEntityReferenceServiceProvider.php +++ b/src/DynamicEntityReferenceServiceProvider.php @@ -6,6 +6,7 @@ use Drupal\Core\DependencyInjection\ContainerBuilder; use Drupal\Core\DependencyInjection\ServiceProviderBase; use Drupal\Core\Entity\Query\Sql\QueryFactory as BaseQueryFactory; use Drupal\Core\Entity\Query\Sql\pgsql\QueryFactory as BasePgsqlQueryFactory; +use Drupal\dynamic_entity_reference\Normalizer\DynamicEntityReferenceItemNormalizer; use Drupal\dynamic_entity_reference\Query\PgsqlQueryFactory; use Drupal\dynamic_entity_reference\Query\QueryFactory; use Symfony\Component\DependencyInjection\Definition; @@ -21,18 +22,22 @@ class DynamicEntityReferenceServiceProvider extends ServiceProviderBase { */ public function alter(ContainerBuilder $container) { $modules = $container->getParameter('container.modules'); - if (isset($modules['rest']) && isset($modules['serialization']) && isset($modules['hal'])) { + if (isset($modules['hal'])) { + // Hal module is enabled, add our new normalizer for dynamic entity + // reference items. + // To avoid problems the arguments to + // \Drupal\hal\Normalizer\EntityReferenceItemNormalizer change, re-use + // the same constructor arguments and set the additional dependency + // with a setter method. + $parent_definition = $container->getDefinition('serializer.normalizer.entity_reference_item.hal'); + $service_definition = new Definition(DynamicEntityReferenceItemNormalizer::class, $parent_definition->getArguments()); - // Add a normalizer service for dynamic_entity_reference fields. - $service_definition = new Definition('Drupal\dynamic_entity_reference\Normalizer\DynamicEntityReferenceItemNormalizer', [ - new Reference('rest.link_manager'), - new Reference('serializer.entity_resolver'), - new Reference('module_handler'), - ]); // The priority must be higher than that of - // serializer.normalizer.entity_reference.hal in hal.services.yml. - $service_definition->addTag('normalizer', ['priority' => 20]); + // serializer.normalizer.entity_reference_item.hal in + // hal.services.yml. + $service_definition->addTag('normalizer', array('priority' => $parent_definition->getTags()['normalizer'][0]['priority'] + 1)); $container->setDefinition('serializer.normalizer.entity.dynamic_entity_reference_item.hal', $service_definition); + } $map = [ 'entity.query.sql' => [