Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

generate:bundleのformatパラメータとDependencyInjection下のExtension.phpの中身

前のエントリの続きです。
追記にも書きましたが、@hidenorigotoさんからpullリクエストをもらい、原因が判りました。ありがとうございます:-)

直接の原因

問題となった部分ですが、

を見るとsrc/Acme/AndRoleVoterBundle/DependencyInjection/AcmeAndRoleVoterExtension.phpに以下のコードが追加されています。

<?php$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));

        $loader->load('services.yml');

「services.ymlを設定ファイルとしてロードするよ」ということですが、まあ言われてみれば当たり前っちゃ当たり前ですね。。。

何でこのような違いが出てきたのか?

ちょっと試したところ、generate:bundleのformatパラメータで指定した内容によってDependencyInjection下のExtension.phpの中身が変わるようです。
以下、formatパラメータを"yml"と"xml"でBundleを作って差分を取った結果です。

$ php app/console generate:bundle --namespace=Acme/YamlBundle --dir=src --format=yml --no-interaction
$ php app/console generate:bundle --namespace=Acme/XmlBundle --dir=src --format=xml --no-interaction
$ diff src/Acme/YamlBundle/DependencyInjection/AcmeYamlExtension.php src/Acme/XmlBundle/DependencyInjection/AcmeXmlExtension.php
3c3
< namespace Acme\YamlBundle\DependencyInjection;
---
> namespace Acme\XmlBundle\DependencyInjection;
15c15
< class AcmeYamlExtension extends Extension
---
> class AcmeXmlExtension extends Extension
25,26c25,26
<         $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
<         $loader->load('services.yml');
---
>         $loader = new Loader\XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
>         $loader->load('services.xml');
$ 

前のエントリでも「別Bundleだとservices.ymlでうまくいってる」と書きましたが、確かにインタラクティブモードでymlを指定してました。
ちなみに、"--format=php"の場合も同様に

  • FileLoaderはLoader\PhpFileLoader
  • 設定ファイルの拡張子は".php"(services.php)

になりました。

ということで

「それぞれのBundleのExtensionでどのフォーマットをサポートしているのか?」を最初っから統一するのが一番面倒がなさそうですね。