Как использовать конфигурационный файл YAML в Silex Framework

Можно ли настроить приложение Silex с конфигурационными файлами YAML? Держу пари, да, но как это делается правильно? Например, я хочу использовать разные конфигурации в зависимости от среды, например config.dev.yml и config.prod.yml.

Файл конфигурации должен содержать параметры для самого приложения и для зарегистрированных расширений / служб.

Пример:

// 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', )); 

Должен ли я самостоятельно анализировать файл YAML и задавать параметры соответственно или есть более «волшебный» способ сделать это?

Прежде всего, добавьте компонент Symfony Yaml к вашему composer.json

 "symfony/yaml": "2.1.*@dev", 

Используйте правильную версию, выбрав прямо со страницы packagist: https://packagist.org/packages/symfony/yaml

Теперь вы можете добавить deralex YamlConfigProvider , простой и полезный поставщик Silex. Добавьте его в композитор.json :

 "deralex/yaml-config-service-provider": "1.0.x-dev" 

Здесь официальная страница github: https://github.com/deralex/YamlConfigServiceProvider

Здесь страница packagist: https://packagist.org/packages/deralex/yaml-config-service-provider

ОБНОВИТЬ

Установите зависимости с ./composer.phar update команды ./composer.phar update и, наконец, добавьте эти строки в файл приложения:

 $app = new Silex\Application(); $app->register(new DerAlex\Silex\YamlConfigServiceProvider(__DIR__ . '/settings.yml')); 

Теперь, например, вы можете сделать это:

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

Этот пакет в ответе не работает для Silex 2.0, поэтому я создал пакет, который работает для Silex 2.0 и Symfony / Yaml 3.1. Возможно, кто-то, кто ищет этот ответ, найдет его полезным

https://packagist.org/packages/rpodwika/yaml-config-service-provider

использовать команду run

 composer require rpodwika/yaml-config-service-provider 

или добавить

 "rpodwika/yaml-config-service-provider" : "dev-master" 

вашему композитору.json

github link https://github.com/rpodwika/yaml-config-service-provider

использовать:

 <?php require_once __DIR__.'/../vendor/autoload.php'; $app = new Silex\Application(); $app->register(new Rpodwika\Silex\YamlConfigServiceProvider("settings.yml")); echo $app['config']['database']['driver']; 

LoadConfigExtension, описанный @fbrandel (выше в комментариях), позволяет вам совместно использовать службу конфигурации загрузчика yml.