我按照以下教程进行了自定义补水。 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>
我的保湿器中还需要其他服务,所以我需要将其注册为服务。
答案 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()
方法。
希望这有帮助。