php - array - Cómo usar un archivo de configuración YAML en Silex Framework
silex php (3)
En primer lugar, agregue el componente Symfony Yaml a su composer.json
"symfony/yaml": "2.1.*@dev",
Use la versión correcta eligiendo directamente desde la página del paquete: https://packagist.org/packages/symfony/yaml
Ahora, puede agregar el deralex YamlConfigProvider , un proveedor de Silex simple y útil. Agrégalo a tu compositor.json :
"deralex/yaml-config-service-provider": "1.0.x-dev"
Aquí está la página oficial de github: https://github.com/deralex/YamlConfigServiceProvider
Aquí está la página del packagist: https://packagist.org/packages/deralex/yaml-config-service-provider
ACTUALIZAR
Instale las dependencias con el ./composer.phar update
y finalmente agregue estas líneas a su archivo de aplicación:
$app = new Silex/Application();
$app->register(new DerAlex/Silex/YamlConfigServiceProvider(__DIR__ . ''/settings.yml''));
Ahora, por ejemplo, puedes hacer esto:
settings.yml
database:
driver: pdo_mysql
host: localhost
dbname: database_name
user: root
password: password
charset: utf8
index.php
$app->register(new Silex/Provider/DoctrineServiceProvider(), array(
''db.options'' => $app[''config''][''database'']
));
¿Es posible configurar una aplicación Silex con archivos de configuración YAML? Apuesto que sí, pero ¿cómo se hace correctamente? Por ejemplo, quiero utilizar diferentes configuraciones según el entorno, como config.dev.yml y config.prod.yml.
El archivo de configuración debe contener parámetros para la aplicación en sí y para las extensiones / servicios registrados.
Ejemplo:
// Debug flag should be set in the config file
$app[''debug''] = true;
// Extension options should also be set in config file
$app->register(new Silex/Extension/TwigExtension(), array(
''twig.path'' => __DIR__.''/views'',
''twig.class_path'' => __DIR__.''/vendor/Twig/lib'',
));
¿Tengo que analizar el archivo YAML por mi cuenta y establecer los parámetros de forma correspondiente o hay una forma más "mágica" de hacer esto?
Este paquete en la respuesta no funciona para Silex 2.0, por eso he creado un paquete que funciona para Silex 2.0 y Symfony / Yaml 3.1. Tal vez alguien que busca esta respuesta lo encuentre útil
https://packagist.org/packages/rpodwika/yaml-config-service-provider
usar comando de ejecución
composer require rpodwika/yaml-config-service-provider
o agregar
"rpodwika/yaml-config-service-provider" : "dev-master"
a tu compositor.json
enlace github https://github.com/rpodwika/yaml-config-service-provider
usar:
<?php
require_once __DIR__.''/../vendor/autoload.php'';
$app = new Silex/Application();
$app->register(new Rpodwika/Silex/YamlConfigServiceProvider("settings.yml"));
echo $app[''config''][''database''][''driver''];
La LoadConfigExtension descrita por @fbrandel (arriba en los comentarios) le permite compartir el servicio de configuración del cargador yml.