Robo Config enables a flexible configuration processing for Robo by providing the following features:
- Define your default configuration in
robo.yml.dist
and let developers override that locally in theirrobo.yml
. - Allow configuration files to use properties defined within the same configuration in a Phing-like fashion.
- Allow all properties to be overridden on the command line so that they can be tweaked when running continuous integration builds.
- Access any configuration parameter via
$this->config('my.configuration.property
);`
Install with Composer by running:
$ composer require nuvoleweb/robo-config
After installation add the following trait to your RoboFile.php
:
<?php
class RoboFile extends Robo\Tasks {
use NuvoleWeb\Robo\Task\Config\loadTasks;
}
For example, consider having the following robo.yml.dist
file:
site:
name: "Default site name"
email: "me@example.com"
url: "http://localhost"
account:
name: "admin"
password: !account.name
email: !site.email
And the following robo.yml
file:
site:
name: "My site name"
When running:
./vendor/bin/robo my-command -o "site.url: http://127.0.0.1:8888"
The resulting configuration will be:
site:
name: "My site name"
email: "me@example.com"
url: "http://127.0.0.1:8888"
account:
name: "admin"
password: "admin"
email: "me@example.com"
Robo Config exposes three tasks that allow to convert a YAML configuration subset into PHP array. Such array will be then appended, prepended or written down to a PHP destination file as an array.
This might be useful for applications that have part of their configuration expressed in a PHP file, like Drupal or Silex.
For example, the following YAML portion:
settings:
config:
system.logging:
error_level: verbose
settings:
scan_tests: TRUE
Will be converted into:
// Start settings processor block.
$config["system.logging"] = array('error_level' => 'verbose');
$settings["scan_tests"] = true;
// End settings processor block.
And added to a PHP file.
Given an existing /my/config.php
file, by calling:
<?php
class RoboFile {
public function appendTask() {
$this->taskAppendConfiguration('/my/config.php')->run();
}
}
We will get the following result:
<?php
// Content of /my/config.php here...
// Start settings processor block.
$config["system.logging"] = array('error_level' => 'verbose');
$settings["scan_tests"] = true;
// End settings processor block.
Given an existing /my/config.php
file, by calling:
<?php
class RoboFile {
public function appendTask() {
$this->taskPrependConfiguration('/my/config.php')->run();
}
}
We will get the following result:
<?php
// Start settings processor block.
$config["system.logging"] = array('error_level' => 'verbose');
$settings["scan_tests"] = true;
// End settings processor block.
// Content of /my/config.php here...
Given a non-existing /my/config.php
file, by calling:
<?php
class RoboFile {
public function appendTask() {
$this->taskWriteConfiguration('/my/config.php')->run();
}
}
We will get the following result:
<?php
// Start settings processor block.
$config["system.logging"] = array('error_level' => 'verbose');
$settings["scan_tests"] = true;
// End settings processor block.
The behaviors of all tasks above can be customized as follow:
<?php
class RoboFile {
public function myTask() {
$config = $this->getMyConfiguration();
$this->taskAppendConfiguration('/my/config.php', $config) // Use custom configuration.
->setBlockStart('// Start') // Change opening comment.
->setBlockEnd('// End') // Change closing comment.
->setConfigKey('parameters') // Use `parameters:` instead of default `settings:`
->run();
}
}
If you just want to use the PHP configuration file processing tasks above in your custom Robo application you can load them by including the following trait:
<?php
class RoboFile {
use \NuvoleWeb\Robo\Task\Config\Php\loadTasks;
}