Php 将Symfony水合器登记在隔离束中
我创建了几个模块化应用程序,它们共享捆绑包。其中一个bundle负责处理所有与实体/存储库相关的逻辑(我们称之为MyBundle) 此MyBundle包含多个自定义水合器。鉴于特定应用程序中包含条令配置,并且我不希望必须在其config.yml文件中注册捆绑水合器,我如何在捆绑包中注册这些水合器 我已经尝试在我的包中创建一个编译器类,然后在doctrine orm配置服务上调用AddCustomHyderationMode,但这不起作用Php 将Symfony水合器登记在隔离束中,php,symfony,orm,doctrine-orm,hydration,Php,Symfony,Orm,Doctrine Orm,Hydration,我创建了几个模块化应用程序,它们共享捆绑包。其中一个bundle负责处理所有与实体/存储库相关的逻辑(我们称之为MyBundle) 此MyBundle包含多个自定义水合器。鉴于特定应用程序中包含条令配置,并且我不希望必须在其config.yml文件中注册捆绑水合器,我如何在捆绑包中注册这些水合器 我已经尝试在我的包中创建一个编译器类,然后在doctrine orm配置服务上调用AddCustomHyderationMode,但这不起作用 我还尝试创建一个“HydrationManager”类,注
我还尝试创建一个“HydrationManager”类,注入实体管理器,然后在编译器过程中调用管理器上的addHydrator方法,该方法反过来调用getConfiguration()->addCustomHydrationMode(…),但这也不起作用我正在寻找一个类似的解决方案,偶然发现了这个示例:
我在寻找类似的解决方案,偶然发现了这个例子:
我也尝试着做同样的事情,并且在kernel.request订阅者中添加我的Hydrators,注入doctrine.orm.entity_管理器,从这里可以调用getConfiguration()->addCustomHyderationMode()。可能有点老套,但它奏效了。。。直到我找到了这个答案,并按照ABM_Dan的答案实现。我一直在尝试做同样的事情,并管理——如果有兴趣的话——在kernel.request订阅者中添加我的Hydrator,注入doctrine.orm.entity_管理器,从中可以调用getConfiguration()->AddCustomHyderationMode()。可能有点老套,但它奏效了。。。直到我找到了这个答案,并按照ABM_Dan的答案实施。。。。然后,当然,不要忘记将编译器传递添加到包根处的包类中,如下所示:。。。然后,当然,不要忘记将编译器过程添加到bundle根目录下的bundle类中,如下所示:
<?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']
);
}
}