Symfony2 - ベンダーバンドルをどのように拡張するか(例えば、FosFacebookBundle)

StackOverflow https://stackoverflow.com//questions/9676247

質問

シナリオ:

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

私のアプローチ:

AcmeFaceBookBundleを作成しました。

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 \ facebook bundle \ enesencyinjection \ acmefaceBookextension 私はすべてのアプリをループしています。このアイデアは、server_urlパラメータを現在のURLと比較し、FOS_FaceBook構成を鉱山でオーバーライドすることです。

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内から要求オブジェクトまたはDICにアクセスできない。 私は私のアプローチで完全に間違っていますか?この問題に取り組む方法については、どのようにしてもらえますか?

役に立ちましたか?

解決

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top