定制主义保湿器作为symfony服务

时间:2016-11-23 10:27:06

标签: php symfony doctrine-orm

我按照以下教程进行了自定义补水。 https://techpunch.co.uk/development/create-custom-doctrine2-hydrator-symfony2

我对此并不满意。我不希望我的包的用户需要在config.yml中配置保湿器。

是否可以将其添加为服务并标记它,例如

<service id="bundle.hydration.custom" class="Your\Bundle\Hydrators\ListHydrator">
    <argument type="service" id="helper_service" />

    <tag name="doctrine.hydrator" alias="ListHydrator" />
</service>

我的保湿器中还需要其他服务,所以我需要将其注册为服务。

1 个答案:

答案 0 :(得分:1)

如果自定义水合器除了实体管理器之外没有依赖关系,那么你可以在容器编译期间获得"doctrine.orm% name% _configuration"的定义并注入类名:

$container
    ->getDefinition('doctrine.orm.some_configuration') // replace "some" by your entity manager name
    ->addMethodCall('addCustomHydrationMode', [
        'custom_custom', 'SomeCustomHydratorClass'
    ]);

但是,如果保湿剂依赖于其他服务,那就是一个问题:学说实例化水化器本身:

// Doctrine\ORM\EntityManager::newHydrator($hydrationMode)

if (($class = $this->config->getCustomHydrationMode($hydrationMode)) !== null) {
    return new $class($this);
}

因此,您可能需要create a custom EntityManager并覆盖newHydrator()方法。

希望这有帮助。