objects array php yaml symfony silex

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.