2012-03-10 9 views
1

Symfony2でDoctrineサービスにいくつかのメソッドを追加したいと思います。どうやってやるの?クラスをいくつか拡張してサービスとして登録する必要がありますか?私はサービスが「教義」の名の下にとどまることを好むだろう。Symfony2でDoctrineサービスを拡張するには?

答えて

1

あなたはSymfony\Bundle\DoctrineBundle\Registryクラスを拡張し、メソッドを所有して追加する必要があります。

次に、あなたがしなければならないすべては「教義」と命名された例のためのアプリケーション/設定/ config.ymlでサービスを定義している:config.ymlで定義されて

// app/config/config.yml 
services: 
    doctrine: 
     class: MyDoctrineRegistry 
     arguments: [ @service_container ] 

サービスはそう、最後にロードされますデフォルトの値を上書きします。

あなたはもっときれいになりたい場合は、使用して依存性の注入/拡張でサービスを無効にする必要があります。この最後の場合には

$container->setAlias('doctrine', 'my_doctrine'); // my_doctrine is the name of you custom doctrine service 

を、あなたのバンドルがコアバンドルの後にロードされていることを確認する必要があります。

+0

上記の解決方法を試してみると、 "ErrorException:Catchable Fatal Error:引数1がSymfony \ Bundle \ DoctrineBundle \ Registryに渡されました:: __ construct()はインターフェイスSymfony \ Component \ DependencyInjection \ ContainerInterface 、与えられていない "。これは、レジストリクラスがいくつかの引数を必要とするためです。どのようにそれに対処する任意のアイデアですか? – JohnM2

+0

はい、サービス定義はコンストラクタに引数を提供する必要があります。ここでは、 "service_container"サービスである必要があります。更新された投稿を参照してください。 – Florian

+0

レジストリクラスのコンストラクタには、5つの必須引数があります:__construct(ContainerInterface $ container、array $ connections、array $ entityManagers、$ defaultConnection、$ defaultEntityManager) – JohnM2

0

接続のラッパークラスを指定し、その中にカスタムメソッドを指定できます。私はDoctrineのDBAL機能を拡張するために以前これを使用していましたが、私の使用例ではうまく機能しました。ここ

詳細:

https://stackoverflow.com/a/8242438/312962

+0

この場合は必要ありませんが、このソリューションを他の問題で使用します。ありがとうございます。 – JohnM2

+0

あなたは大歓迎です:) –

関連する問題