2012-03-12 7 views
5

シナリオ:Symfony2の - (例えばFOSFacebookBundleの)ベンダーバンドルを拡張する方法

私は私が私の構成で正確に一つのFacebookアプリのためのパラメータを設定することができますバンドル(FOSFacebookBundle)を使用しています。すべてが完璧に機能しますが、今は1つのアプリだけでなく、複数のアプリを設定する必要があります。

私のアプローチ:

は、私はそうのようなアレイ内の複数のアプリケーションを定義することができますAcmeFacebookBundleを、(設定はアクメ\ FacebookBundle \依存性の注入\設定で定義)を作成しました

acme_facebook: 
    apps: 
     some_competition: 
      server_url: %acme.facebook.some_competition.server_url% 
      file: %kernel.root_dir%/../vendor/facebook/php-sdk/src/base_facebook.php 
      alias: facebook 
      app_id: %acme.facebook.some_competition.app_id% 
      secret: % acme .facebook.some_competition.secret% 
      cookie: true 
      permissions: [email, user_birthday, user_location] 
     some_other_competition: 
      server_url: %acme.facebook. some_other_competition.server_url% 
      file: %kernel.root_dir%/../vendor/facebook/php-sdk/src/base_facebook.php 
      alias: facebook 
      app_id: %acme.facebook. some_other_competition.app_id% 
      secret: % acme .facebook. some_other_competition.secret% 
      cookie: true 
      permissions: [email, user_birthday, user_location] 

Acme \ FacebookBundle \ DependencyInjection \ AcmeFacebookExtension私はすべてのアプリケーションをループしています。この考え方は、server_urlパラメータを現在のURLと比較し、fos_facebook設定をmineで上書きすることです。

class AcmeFacebookExtension extends Extension 
{ 
    ... 
    /** 
    * {@inheritDoc} 
    */ 
    public function load(array $configs, ContainerBuilder $container) 
    { 
     $configuration = new Configuration(); 
     $config = $this->processConfiguration($configuration, $configs); 

     foreach ($config['apps'] as $app) 
     { 
      // check for matching path here? 
      foreach (array('file', 'app_id', 'secret', 'cookie', 'domain', 'logging', 'culture', 'permissions') as $attribute) 
      { 
       $container->setParameter('fos_facebook.' . $attribute, $app[$attribute]); 
      } 
     } 
    } 

問題:

しかし、私はこだわっているところ、これは正確です。明らかに、私はこの比較を行うために、AcmeFacebookExtension内からRequestオブジェクトまたはDiCにアクセスすることはできません。 私のアプローチは完全に間違っていますか?この問題にどのように取り組むべきか、あなたはもっと良い考えを持っていますか?

+0

異なるquestin、同じ目標:[Symfony2の負荷条件設定](http://stackoverflow.com/questions/9603384/symfony2-load-conditional-configuration) – leek

+0

ええ、あなたのコントローラの設定を正しい方法にしているのかどうか分かりません。設定の解析が行われたときに設定を注入すると、それを行う正しい方法のように感じる... – Burgi

答えて

4

作成するものはCompilerPassなので、他のすべての設定がロードされた後にContainerを操作できます。これらはあなたが始める必要があります。

+0

トップのもの、まさに私が必要としたもの。私はそこからそれを取る。私が見ることができる唯一の問題は、FOSUserbundleは初期の解析時にすべてのfos_user設定を設定する必要があるということです。今はダミー設定をモックアップする必要があります。これを回避する方法はありますか? – Burgi

+0

最初にバンドルをロードしようとしましたか?このようにして、他のバンドルで必要なパラメータを設定することができます。 (私はこれがうまくいくかどうかは完全にはわかりません - ちょっと推測します) – leek

+0

はい、私はバンドルの順序で遊んできました。 Extension-> load()メソッドは最初に呼び出されたように見え、CompilerPassメソッドはすべての拡張設定が処理された後にのみ呼び出されます。 また、CompilerPassでコンテナ全体にアクセスすることができないため、Requestオブジェクトを取得できず、現在のURLを取得するために$ _SERVERを使用する必要があります:( – Burgi

関連する問題