2016-11-23 9 views
1

私はカスタム水和のチュートリアルに従いました。 https://techpunch.co.uk/development/create-custom-doctrine2-hydrator-symfony2symfonyサービスとしてのカスタムドクターヒートレーター

私はそれに満足していません。私は私のバンドルのユーザが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

カスタムハイドレーターは、エンティティマネージャ以外の依存関係はありませんならば、あなたは、コンテナのコンパイル時に"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()メソッドをオーバーライド:ハイドレーター自体をインスタンス化します。

これが役に立ちます。

+0

ありがとうございました!しかし、カスタムエンティティマネージャが私が頼りにしたいのではない別の方法に行く必要があると思う。 –

関連する問題