Symfony2のDIエクステンション

(まだきちんと全容をつかめていないのですが)Symfony2のDI+バンドルのシステムには「エクステンション」という機構があって、DIコンテナから得られる設定を使ってバンドルの初期化などを行えます。

これは、各バンドル内の「DependencyInjection」というディレクトリ内に、「〜Extension.php」というファイル名で、Symfony\Bundle\FrameworkBundle\DependencyInjection\Extensionを継承したクラスを作って実装します。

FrameworkExtensionのエイリアスは「app」

エクステンションにはエイリアスをつけることができるようで、エクステンションの「getAlias()」でエイリアス名を返せば、それがエイリアス名になります。
ちなみにFrameworkExtensionはエイリアスが「app」になっていました。
そして、configファイルの「app.config」というエントリの設定で、FrameworkExtensionが初期化されます。

このように、configファイルの各エントリは、エクステンションが対応しています。

  • app.config → appというエイリアスのエクステンション(= FrameworkExtension)のconfigLoad()メソッドが呼ばれる。
  • twig.config → twigというエイリアスのエクステンション(= TwigExtension)のconfigLoad()メソッドが呼ばれる。
  • doctrine.dbal → doctrineというエイリアスのエクステンション(= DoctrineExtension)のdbalLoad()メソッドが呼ばれる。
  • doctrine.orm → doctrineというエイリアスのエクステンション(= DoctrineExtension)のormLoad()メソッドが呼ばれる。
  • swiftmailer.config → swiftmailerというエイリアスのエクステンション(= SwiftmailerExtension)のconfigLoad()メソッドが呼ばれる。