Как использовать файл конфигурации YAML в Silex Framework
можно ли настроить приложение Silex с файлами конфигурации YAML? Спорю, да, но как это сделать правильно? Например, я хочу использовать различные конфигурации в соответствии с окружающей средой, например config.разработка.yml и config.подгонять.в формате 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 SilexExtensionTwigExtension(), array(
'twig.path' => __DIR__.'/views',
'twig.class_path' => __DIR__.'/vendor/Twig/lib',
));
должен ли я самостоятельно анализировать файл YAML и устанавливать параметры соответственно или есть более "волшебный" способ сделать это?
3 ответов
прежде всего, добавьте компонент Symfony Yaml в свой композитор.в 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
вот страница упаковщика:https://packagist.org/packages/deralex/yaml-config-service-provider
обновление
установите зависимости с помощью ./composer.phar update
команда и, наконец, добавить эти строки в файл приложения:
$app = new Silex\Application();
$app->register(new DerAlex\Silex\YamlConfigServiceProvider(__DIR__ . '/settings.yml'));
сейчас, например, вы можете сделать это:
настройки.в формате YML
database:
driver: pdo_mysql
host: localhost
dbname: database_name
user: root
password: password
charset: utf8
.в 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 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 (выше в комментариях), позволяет share служба конфигурации загрузчика yml.