2016-11-23 29 views
1

我沒有按照以下教程進行自定義水合作用。 https://techpunch.co.uk/development/create-custom-doctrine2-hydrator-symfony2作爲symfony服務的自定義主義水合物

我不滿意它。我不希望我的包的用戶需要在config.yml中配置hydrator。

是否可以將其作爲服務添加並標記爲例如

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

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

另外我需要其他服務在我的hydrator所以我需要註冊爲服務。

回答

1

如果自定義的水化具有除了實體管理器沒有依賴關係,那麼你就可以容器編譯過程中獲得的"doctrine.orm% name% _configuration"的定義和注入類的名稱:

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

但如果水化依賴於其他服務這是一個問題:學說實例化一個hydrators本身:

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

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

所以,也許你需要create a custom EntityManager和覆蓋newHydrator()方法。

希望這會有所幫助。

+0

謝謝!但想一想,我需要以另一種方式定製實體經理,而不是我想要的。 –