Awesome
Slim Framework Config
A file configuration loader that supports PHP, INI, XML, JSON, and YML files for the Slim Framework. It internally uses hassankhan/config.
Install
Via Composer
$ composer require davidepastore/slim-config
Requires Slim 3.0.0 or newer.
Usage
In most cases you want to register DavidePastore\Slim\Config
for a single route, however,
as it is middleware, you can also register it for all routes.
Register per route
$app = new \Slim\App();
// Fetch DI Container
$container = $app->getContainer();
// Register provider
$container['config'] = function () {
//Create the configuration
return new \DavidePastore\Slim\Config\Config('config.json');
};
$app->get('/api/myEndPoint',function ($req, $res, $args) {
//Here you have your configuration
$config = $this->config->getConfig();
$secret = $config->get('security.secret');
})->add($container->get('config'));
$app->run();
Register for all routes
$app = new \Slim\App();
// Fetch DI Container
$container = $app->getContainer();
// Register provider
$container['config'] = function () {
//Create the configuration
return new \DavidePastore\Slim\Config\Config('config.json');
};
// Register middleware for all routes
// If you are implementing per-route checks you must not add this
$app->add($container->get('config'));
$app->get('/foo', function ($req, $res, $args) {
//Here you have your configuration
$config = $this->config->getConfig();
$secret = $config->get('security.secret');
});
$app->post('/bar', function ($req, $res, $args) {
//Here you have your configuration
$config = $this->config->getConfig();
$ttl = $config->get('app.timeout', 3000);
});
$app->run();
Where are the benefits?
The configuration is loaded from the filesystem only when the given route is called in the per route usage. In the other case (all routes) the config should be general and used in the whole routes, because it's read in every request.
Just the tip of the iceberg!
You can read the hassankhan/config documentation here for more info.
Testing
$ phpunit
Contributing
Please see CONTRIBUTING for details.