Is it possible to configure a Silex Application with YAML config files? I bet yes, but how is it done correctly? For instance I want to use different configurations according to the environment, like config.dev.yml and config.prod.yml.
The config file should contain parameters for the app itself and for the registered extensions/services.
Example:
// 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',
));
Do I have to parse the YAML file by myself and set the parameters accordingly or is there a more "magic" way to do this?
The config. yaml file contains all the configuration settings that are needed to deploy your cluster. From the config. yaml file, you can customize your installation by using various parameters.
By default, config. yml is located in the IQ server installation directory, i.e. the same folder that contains the IQ Server . jar file.
First of all, add the Symfony Yaml component to your composer.json
"symfony/yaml": "2.1.*@dev",
Use the right version choosing directly from the packagist page: https://packagist.org/packages/symfony/yaml
Now, you can add the deralex YamlConfigProvider, a simple and useful Silex provider. Add it to your composer.json:
"deralex/yaml-config-service-provider": "1.0.x-dev"
Here the official github page: https://github.com/deralex/YamlConfigServiceProvider
Here the packagist page: https://packagist.org/packages/deralex/yaml-config-service-provider
UPDATE
Install the dependencies with ./composer.phar update
command and finally add these lines to your app file:
$app = new Silex\Application();
$app->register(new DerAlex\Silex\YamlConfigServiceProvider(__DIR__ . '/settings.yml'));
Now, for example, you can do this:
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']
));
This package in the answer does not work for Silex 2.0 that is why I've created package that works for Silex 2.0 and Symfony/Yaml 3.1. Maybe someone looking for this answer will find it useful
https://packagist.org/packages/rpodwika/yaml-config-service-provider
to use run command
composer require rpodwika/yaml-config-service-provider
or add
"rpodwika/yaml-config-service-provider" : "dev-master"
to your composer.json
github link https://github.com/rpodwika/yaml-config-service-provider
to use:
<?php
require_once __DIR__.'/../vendor/autoload.php';
$app = new Silex\Application();
$app->register(new Rpodwika\Silex\YamlConfigServiceProvider("settings.yml"));
echo $app['config']['database']['driver'];
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With