i确实在以下教程以进行自定义水合。https://techpunch.co.uk/development/create-custom-doctrine2-hydrator-symfony2
我对此不满意。我不希望我的捆绑包的用户需要在其中配置水合物config.yml。
是否可以将其添加为服务并将其标记为例如。
<service id="bundle.hydration.custom" class="YourBundleHydratorsListHydrator">
<argument type="service" id="helper_service" />
<tag name="doctrine.hydrator" alias="ListHydrator" />
</service>
我还需要水合物中的其他服务,因此我需要将其注册为服务。
如果自定义水合物除了Entity Manager以外没有依赖关系,那么您可以在容器编译和注入类名称中获得"doctrine.orm% name% _configuration"
的定义:
$container
->getDefinition('doctrine.orm.some_configuration') // replace "some" by your entity manager name
->addMethodCall('addCustomHydrationMode', [
'custom_custom', 'SomeCustomHydratorClass'
]);
但是,如果水合物取决于其他服务,那是一个问题:学说实例化水合物本身:
// DoctrineORMEntityManager::newHydrator($hydrationMode)
if (($class = $this->config->getCustomHydrationMode($hydrationMode)) !== null) {
return new $class($this);
}
所以,也许您需要创建一个自定义EntityManager并覆盖newHydrator()
方法。
希望这会有所帮助。