Symfony2 - ベンダーバンドルをどのように拡張するか(例えば、FosFacebookBundle)
-
12-12-2019 - |
質問
シナリオ:
私は私の構成で正確に1つのFacebookアプリのパラメータを設定できるようにするバンドル(FosFacebookbundle)を使用しています。すべてが完全にうまく機能しますが、今、私は1つのアプリだけでなく複数のアプリを設定する必要があります。
私のアプローチ:
AcmeFaceBookBundleを作成しました。
.
acme \ facebook bundle \ enesencyinjection \ acmefaceBookextension 私はすべてのアプリをループしています。このアイデアは、server_urlパラメータを現在のURLと比較し、FOS_FaceBook構成を鉱山でオーバーライドすることです。 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]
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
を操作できるようになります。これらはあなたが始められるべきです: