Зарегистрируйте гидраторы Symfony в изолированном пакете

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

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

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

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

0

Решение

Я искал подобное решение и наткнулся на этот пример:
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']
);
}
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]