php - 在隔离包中注册 Symfony Hydrators

标签 php symfony orm doctrine-orm hydration

我创建了几个共享 Bundle 的模块化应用程序。其中一个包负责处理所有实体/存储库相关的逻辑(我们称之为 MyBundle)。

这个 MyBundle 包含几个自定义 Hydrator 。鉴于教义配置包含在特定应用程序中,并且我不希望在其 config.yml 文件中注册捆绑 Hydrator ,我如何在捆绑包中注册这些 Hydrator ?

我尝试在我的包中创建一个 CompilerPass,然后在学说 orm 配置服务上调用 addCustomHydrationMode 但这不起作用。

我还尝试创建一个“HydrationManager”类,注入(inject)实体管理器,然后在编译器传递中调用管理器上的 addHydrator 方法,该方法又调用 getConfiguration()->addCustomHydrationMode(...) 但这也不起作用

最佳答案

我正在寻找一个类似的解决方案,并偶然发现了这个例子:
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']
        );
    }
}

关于php - 在隔离包中注册 Symfony Hydrators,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37816618/

相关文章:

javascript - 将网页保存为 pdf 格式,与在浏览器中的外观完全相同

php - Stripe PHP API 方法响应的结构是什么?

php - Symfony 与 Windows Azure 连接

php - 当与 MongoDB 的连接未关闭时会发生什么?

symfony - Elasticsearch PHP最长前缀匹配

symfony - 如何将服务注入(inject) Symfony 2 Data Fixtures?

php - 获取 5 分钟前的行

.net - ORM 架构 : One or Multiple Models (Entity Framework)

javascript - sequelize 模型中字段的数据类型

php - 在 prestashop 中检索当前页面的不同语言的 URL