phpgt/config

Manage configuration with ini files and environment variables.

Maintainers

Details

github.com/PhpGt/Config

Source

Issues

Fund package maintenance!
PhpGt

v1.1.0 2021-01-30 14:24 UTC

README

Manage your project configuration by defining defaults, that can be overridden by ini files and environment variables.

Also provides functionality for generating ini files from the CLI.

Documentation: https://php.gt/docs/config

Build status Code quality Code coverage Current version PHP.Gt/Config documentation

Example usage - loading project configuration:

A project's configuration can be split across multiple files. The following example shows how a secret can be supplied through the environment, which is used to override the default value defined within config.ini, and also shows how other named config files can be used.

nginx.conf:

location ~ \.php$ {
	fastcgi_pass	unix:/var/run/php/php7.1-fpm.sock;
	fastcgi_param	database_password	super-secret-passw0rd;
	include		fastcgi_params;
}

config.ini:

[app]
namespace = MyApp
debug = true
logging = verbose

[database]
host = db.example.com
schema = local_shop
username = admin
password = admin_pass

[shopapi]
key = jungfnyyguvffubhgvat
secret = guvfvfnybpnyfubcgurerfabguvatsbelbhurer

config.dev.ini:

[database]
host = localhost

example.php:

// Load config.ini
$config = new Config("/path/to/project");

// Note that the database password is overriden in the environment (from nginx)
// and the host is overridden by the development ini file.
echo $config->get("database.host");		// localhost
echo $config->get("database.port");		// 6612
echo $config->get("database.password");		// super-secret-passw0rd

Example usage - generating configuration files:

Sometimes it's useful to generate config files on-the-fly, such as from Continuous Integration scripts. Below shows a quick example of how to generate a config.deploy.ini file with a few key-values that will override the default.

vendor/bin/config-generate deploy "shopapi.key=test-api-key" "database.schema=local_shop_$BRANCH_NAME"

The above command will create a config.deploy.ini file (note the first argument of "deploy") and provide overrides for two ini keys using dot notation. Note that because this command will be run within a continuous integration setting, we are expecting there to be a $BRANCH_NAME variable set for us, allowing us to use a schema name containing the current branch.