Hola buenas,
Quisiera configurar un bundle a través del archivo config.yml
, donde podré activar funcionalidades según necesidades.
Por ejemplo: Un bundle que su función es visualizar información de la request en el log. Por ahora tengo una sola funcionalidad que deseo activar o desactivar desde config.yml
App/config/config.yml
#InfoLogBundle info_log: user_agent: true
He configurado el archivo DependencyInjection/Configuration.php
para validar los datos con el componente Config
En el archivo DependencyInjection/[mialias]Extension.php cargo el archivo de servicios. LA DUDA es que no sé como manejar la cargar solo de algunos servicios del archivo MiBundle/Resources/config/services.yml y no todos, tal como está ahora.
No sé si se podrá realizar así, los ejemplos que he visto solo cargan o no cargan el archivo services.yml
al completo.
¿Alguna sugerencia?
Muchas gracias!
Respuestas
Cuando tus servicios son dinámicos, puedes hacerlo de dos maneras:
- Definir la mayoría de ellos en el archivo
services.xml
normal y luego manipular lo que haga falta (eliminarlos, cambiarles de nombre, pasarles parámetros, etc.) - No crear ese archivo
services.xml
y definir todos los servicios dinámicamente dentro de la extensión del contenedor de inyección de dependencias.
Si tus servicios son poco dinámicos, usa la opción 1 porque te ahorrará trabajo. Si no, usa la opción 2.
En cuanto a cómo se hace eso, léete el artículo Working with Container Service Definitions porque es exactamente lo que tienes que hacer. En vez de definir servicios en un archivo XML/YAML, tienes que crear "definiciones de servicios" usando PHP. Es más fácil de lo que puede parecer en un principio.
En el archivo FrameworkExtension.php del FrameworkBundle puedes ver muchos ejemplos de cómo se usan las definiciones en la práctica.
@javiereguiluz
Muchas gracias Javier, ya me funciona.
He utilizado la 1º opción, y quedaría así:
//InfoLogBundle\DependencyInjection\InfoLogExtension.php public function load(array $configs, ContainerBuilder $container) { $configuration = new Configuration(); $config = $this->processConfiguration($configuration, $configs); $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); $loader->load('services.yml'); if(!$config['user_agent']) { $container->removeDefinition('info_log.user_agent_subscriber'); } }
Gracias =)
@JuanluGarciaB