Pregunta

Guión:

Estoy usando un paquete (FOSFacebookBundle) que me permite configurar parámetros para exactamente una aplicación de Facebook en mi configuración.Todo funciona perfectamente bien, pero ahora necesito configurar no solo una aplicación, sino varias.

Mi acercamiento:

Creé un AcmeFacebookBundle, que permite definir múltiples aplicaciones (configuración definida en Acme\FacebookBundle\DependencyInjection\Configuración) en una matriz como esta:

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]

En Acme\FacebookBundle\DependencyInjection\AcmeFacebookExtension Luego estoy recorriendo todas las aplicaciones.La idea es comparar el parámetro server_url con la URL actual y anular la configuración de fos_facebook con la mía.

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

Problema:

Pero aquí es exactamente donde estoy estancado.Obviamente, no tengo acceso al objeto Solicitud o al DiC desde AcmeFacebookExtension para hacer esta comparación.¿Me estoy equivocando completamente en mi enfoque?¿Tiene alguna idea mejor sobre cómo abordar este problema?

¿Fue útil?

Solución

Lo que quieres crear es un CompilerPass para que puedas manipular el Container después de que se hayan cargado todas las demás configuraciones.Estos deberían ayudarle a comenzar:

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top