Как использовать файл конфигурации YAML в Silex Framework - PullRequest
18 голосов
/ 20 сентября 2011

Можно ли настроить приложение 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 и устанавливать соответствующие параметры или есть более «волшебный» способ сделать это?

Ответы [ 3 ]

37 голосов
/ 11 марта 2013

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

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

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

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

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

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

Вот страница упаковщика: https://packagist.org/packages/deralex/yaml-config-service-provider

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']
));
3 голосов
/ 15 сентября 2016

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

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

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

composer require rpodwika/yaml-config-service-provider

или добавить

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

вваш composer.json

ссылка на github 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'];
0 голосов
/ 08 ноября 2011

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

...