Symfony2のconfigファイルにおけるimportsの挙動(DIのconfig)

Symfony2のconfigファイルでは、別のconfigファイルをインポートすることができます。
たとえばconfig_dev.ymlでは、共通設定であるconfig.ymlを以下のようにインポートしています。

imports:
    - { resource: config.yml }


また、config_dev.ymlをよく見ると、ルーティングの設定についても似たような記述があることが分かります。

app.config:
    router:   { resource: "%kernel.root_dir%/config/routing_dev.yml" }


前者のimportsで記述したresourceは、このconfigファイルの処理時点で同時にインポートされ、マージされて1つのconfigとして扱われます。
このimportsキーは、YAMLのルート階層にのみ記述できます。
そして、YAMLファイルがパースされるとき、まず最初にimportsの処理が行われ、インポートしているファイルから先に読み込まれて行きます。
この処理は、DependencyInjectionのYamlFileLoaderにおける共通処理となっています。

後者のrouterキーでのresourceは、FrameworkExtensionでの処理になっています。FrameworkExtensionのconfigLoadで、単にresourceのパスなどがコンテナの設定値として保存されます。(コンテナ・エクステンションの読み込み段階ではこれ以上の処理は行われない)

実際にrouterキーのresource(つまりrouting.yml)が読み込まれるのは、内部の処理が先に進み、RouterからRouteCollectionのloadが呼び出される時点です。ここでは、Routingコンポーネントが持つローダー(YamlFileLoader)で処理が行われるので、DIコンテナのconfigとは若干ルールが異なることに注意が必要です。