Frage

Szenario:

Ich verwende ein Bundle (FOSFacebookBundle), mit dem ich Parameter für genau eine Facebook-App in meiner Konfiguration festlegen kann.Alles funktioniert einwandfrei, aber jetzt muss ich nicht nur eine App einstellen, sondern mehrere.

Mein Ansatz:

Ich habe ein AcmeFacebookBundle erstellt, mit dem mehrere Apps definiert werden können (Konfiguration definiert in Acme \ FacebookBundle \ Abhängigkeiteinspritzung \ Konfiguration) in einem Array wie folgt:

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]

In Acme \ FacebookBundle \ Abhängigkeitsinjektion \ ACMEFACEBOOKERWEITERUNG Ich durchlaufe dann alle Apps.Die Idee ist, den Parameter server_url mit der aktuellen URL zu vergleichen und die Konfiguration fos_facebook mit meiner zu überschreiben.

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]);
            }
        }
    }

Problem:

Aber genau hier stecke ich fest.Offensichtlich habe ich innerhalb von AcmeFacebookExtension keinen Zugriff auf das Anforderungsobjekt oder das DiC, um diesen Vergleich durchzuführen.Gehe ich in meinem Ansatz völlig falsch?Haben Sie eine bessere Idee, wie Sie dieses Problem angehen können?

War es hilfreich?

Lösung

Was Sie erstellen möchten, ist ein CompilerPass damit Sie die manipulieren können Container nachdem alle anderen Konfigurationen geladen wurden.Diese sollten Ihnen den Einstieg erleichtern:

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top