Symfony2でDoctrineサービスにいくつかのメソッドを追加したいと思います。どうやってやるの?クラスをいくつか拡張してサービスとして登録する必要がありますか?私はサービスが「教義」の名の下にとどまることを好むだろう。Symfony2でDoctrineサービスを拡張するには?
答えて
あなたは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
を、あなたのバンドルがコアバンドルの後にロードされていることを確認する必要があります。
接続のラッパークラスを指定し、その中にカスタムメソッドを指定できます。私はDoctrineのDBAL機能を拡張するために以前これを使用していましたが、私の使用例ではうまく機能しました。ここ
詳細:
この場合は必要ありませんが、このソリューションを他の問題で使用します。ありがとうございます。 – JohnM2
あなたは大歓迎です:) –
上記の解決方法を試してみると、 "ErrorException:Catchable Fatal Error:引数1がSymfony \ Bundle \ DoctrineBundle \ Registryに渡されました:: __ construct()はインターフェイスSymfony \ Component \ DependencyInjection \ ContainerInterface 、与えられていない "。これは、レジストリクラスがいくつかの引数を必要とするためです。どのようにそれに対処する任意のアイデアですか? – JohnM2
はい、サービス定義はコンストラクタに引数を提供する必要があります。ここでは、 "service_container"サービスである必要があります。更新された投稿を参照してください。 – Florian
レジストリクラスのコンストラクタには、5つの必須引数があります:__construct(ContainerInterface $ container、array $ connections、array $ entityManagers、$ defaultConnection、$ defaultEntityManager) – JohnM2