Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Symfony - Configurar bundle dinámicamente

9 de junio de 2016

Hola,

¿Es posible configurar un bundle de manera dinámica? Es decir, poder establecer un parámetro de ese bundle dependiendo de alguna lógica de negocio.


Respuestas

#1

Esto se hace mediante las "extensiones del contenedor de servicios". Suena raro pero es muy fácil cuando ves algún ejemplo. En este artículo por ejemplo se explica cómo cargar servicios dentro del propio bundle.

En tu caso sería más sencillo porque solo quieres definir parámetros del contenedor de servicios. En estas líneas de código del bundle EasyAdmin puedes ver un ejemplo de cómo definir parámetros dinámicamente.

@javiereguiluz

9 junio 2016, 20:04
#2

Hola Javier,

He agregado la siguiente linea en la clase AppExtension.php

public function load(array $configs, ContainerBuilder $container)
{
    $container->setParameter('app.bucket_upload', 'value-test');
}

Al hacer un debug a ese parametro, obtengo esto:

sf debug:container --parameter=app.bucket_upload
 ------------------- ------------ 
  Parameter           Value       
 ------------------- ------------ 
  app.bucket_upload   value-test  
 ------------------- ------------

Pero cuando trato de usar ese parámetro como valor en las opciones de configuración de otro bundle, obtengo el siguiente error:

ParameterNotFoundException in ParameterBag.php line 84: You have requested a non-existent parameter "app.bucket_upload".

Quisiera explicar un poco mas lo que quiero hacer, tal vez me puedas ayudar. Estoy usando el bundle OneupFlysystemBundle con el adaptador de Amazon S3, lo que necesito es que según el usuario logueado asignar un determinado bucket.

@ramiroanacona

9 junio 2016, 21:48
#3

Lo que quieres hacer es un poco más complicado. No tengo mucha experiencia con ello, pero quizás te sirva lo que se explica en este artículo.

Tampoco he usado el bundle que mencionas, pero en su documentación veo que puedes utilizar tu propio servicio como adaptador. Quizás puedas definir un servicio sencillo como adaptador y ahí comprobar los datos del usuario e instanciar el adaptador S3 con los datos correctos. Sería como una especie de factoría de adaptadores.

@javiereguiluz

9 junio 2016, 22:09