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

18

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

    
задан fbrandel 20.09.2011 в 16:13
источник
  • Просто нашел это расширение на GitHub: github.com/tyaga/LoadConfigExtension/blob/master/... –  fbrandel 20.09.2011 в 19:13
  • Это ничего не устанавливает в вашем приложении / контейнере. Он просто создает службу $ app ['config']. –  igorw 21.09.2011 в 21:18
  • Хорошо, но это просто то, что я искал ... способ загрузить файл конфигурации yml. Ничего волшебного здесь, но работает;) (Будьте осторожны при использовании этого расширения, он использует «старый» ExtensionInterface, который изменился в новой версии Silex) –  fbrandel 24.09.2011 в 14:29

3 ответа

37

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

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

Используйте правильную версию, выбрав прямо со страницы packagist: Ссылка

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

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

Здесь официальная страница github: Ссылка

Здесь страница packagist: Ссылка

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']
));
    
ответ дан Francesco Casula 11.03.2013 в 16:05
источник
  • Знаете ли вы, есть ли подобное расширение для загрузки файла конфигурации PHP? –  Fractaliste 19.09.2014 в 15:13
  • @Fractaliste try github.com/igorw/ConfigServiceProvider это говорит php, json, yaml и toml –  ivoba 01.12.2014 в 10:05
  • Не требуется требовать symfony / yaml в собственном composer.json, потому что это уже требуется deralex / yaml-config-service-provider ;-) –  naitsirch 27.08.2015 в 09:44
  • Я знаю, что вопрос que старый, но «deralex / yaml-config-service-provider» несовместим с последней версией «symfony / yaml». Использовать symfony / yaml было достаточно для меня –  cmnardi 23.08.2016 в 16:28
  • Активно-иш-вилку ConfigServiceProvider с поддержкой Silex 2.0 можно найти по адресу: github.com/reva2/ConfigServiceProvider –  allejo 29.12.2016 в 06:14
3

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

Ссылка

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

composer require rpodwika/yaml-config-service-provider

или добавить

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

для вашего композитора.json

github link Ссылка

для использования:

<?php

require_once __DIR__.'/../vendor/autoload.php';

$app = new Silex\Application();

$app->register(new Rpodwika\Silex\YamlConfigServiceProvider("settings.yml"));

echo $app['config']['database']['driver'];
    
ответ дан Robert 15.09.2016 в 15:26
источник
0

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

    
ответ дан Ronan 08.11.2011 в 16:47
источник