2016-06-14 2 views
0

Я создал несколько модульных приложений, которыми поделились Bundles. Один из этих пакетов, отвечающий за обработку всей логики, связанной с сущностью/репозиторием (позволяет называть ее MyBundle).Зарегистрировать Symfony Hydrators в изолированном комплекте

Этот MyBundle содержит несколько пользовательских гидрантов. Как я могу зарегистрировать эти гидраторы в комплекте, учитывая, что конфигурация доктрины содержится в конкретных приложениях, и я не хочу регистрировать гидраторы пакетов в их файлах config.yml?

Я попытался создать CompilerPass в своем пакете, а затем вызвать addCustomHydrationMode в службе конфигурации orrine orm, но это не сработает.

Я также попытался создать класс «HydrationManager», введя диспетчер сущности, а затем вызвав метод addHydrator на менеджере в проходе компилятора, который в свою очередь вызывает getConfiguration() -> addCustomHydrationMode (...), но это также не работает

+0

Я пытался сделать то же самое и управление - в случае, если она представляет интерес - чтобы добавить мои hydtrators в подписчик kernel.request, вводя doctrine.orm.entity_manager, откуда вы можете позвонить getConfig гурирование() -> addCustomHydrationMode(). Возможно, немного взломанный, но он работал ... пока я не нашел этот ответ и не выполнил его в соответствии с ответом ABM_Dan. – tomchkk

ответ

2

Я искал подобное решение, и наткнулся на этот пример: https://github.com/vivait/user-bundle/blob/master/src/Vivait/UserBundle/DependencyInjection/DoctrineCompilerPass.php

<?php 

namespace Vivait\UserBundle\DependencyInjection; 

use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; 
use Symfony\Component\DependencyInjection\ContainerBuilder; 

class DoctrineCompilerPass implements CompilerPassInterface 
{ 
    /** 
    * You can modify the container here before it is dumped to PHP code. 
    * 
    * @param ContainerBuilder $container 
    * 
    * @api 
    */ 
    public function process(ContainerBuilder $container) 
    { 
     $ormConfigDef = $container->getDefinition('doctrine.orm.configuration'); 
     $ormConfigDef->addMethodCall(
      'addCustomHydrationMode', 
      ['UserCustomerHydrator', 'Vivait\UserBundle\Adapter\Hydrator\CustomerHydrator'] 
     ); 
    } 
} 
+0

... и, конечно же, не забудьте добавить переход компилятора к классу пакетов в корень вашего пакета, так же: https://symfony.com/doc/current/service_container/compiler_passes.html – tomchkk