Skip to content

A file configuration loader that supports PHP, INI, XML, JSON, and YML files for the Slim Framework. It internally uses https://github.com/hassankhan/config.

Notifications You must be signed in to change notification settings

DavidePastore/Slim-Config

Repository files navigation

Slim Framework Config

Latest version Build Status Coverage Status Quality Score Total Downloads PSR2 Conformance

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.

Credits