You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
3.0 KiB
106 lines
3.0 KiB
<?php
|
|
/**
|
|
* li₃: the most RAD framework for PHP (http://li3.me)
|
|
*
|
|
* Copyright 2013, Union of RAD. All rights reserved. This source
|
|
* code is distributed under the terms of the BSD 3-Clause License.
|
|
* The full license text can be found in the LICENSE.txt file.
|
|
*/
|
|
|
|
namespace lithium\core;
|
|
|
|
use lithium\core\Environment;
|
|
|
|
/**
|
|
* The `Configuration` class allow to store `Environement` based configurations.
|
|
*
|
|
* @see lithium\core\Environment
|
|
*/
|
|
class Configuration extends \lithium\core\ObjectDeprecated {
|
|
|
|
/**
|
|
* Can provide configurations based on the environment,
|
|
* i.e. `'development'`, `'production'` or `'test'`
|
|
*
|
|
* @var array of configurations, indexed by name.
|
|
*/
|
|
protected $_configurations = [];
|
|
|
|
/**
|
|
* A closure called by `_config()` which allows to automatically
|
|
* assign or auto-generate additional configuration data, once a configuration is first
|
|
* accessed. This allows configuration data to be lazy-loaded from adapters or other data
|
|
* sources.
|
|
*
|
|
* @param string $name Name of the configuration which is being accessed. This is the key
|
|
* name containing the specific set of configuration passed into `config()`.
|
|
* @param array $config Configuration assigned to `$name`. If this configuration
|
|
* is segregated by environment, then this will contain the configuration for
|
|
* the current environment.
|
|
* @return array Returns the final array of settings for the given named configuration.
|
|
*/
|
|
public $initConfig = null;
|
|
|
|
/**
|
|
* Sets configurations for a particular adaptable implementation, or returns the current
|
|
* configuration settings.
|
|
*
|
|
* @param string $name Name of the scope.
|
|
* @param array $config Configuration to set.
|
|
*/
|
|
public function set($name = null, $config = null) {
|
|
if (is_array($config)) {
|
|
$this->_configurations[$name] = $config;
|
|
return;
|
|
}
|
|
if ($config === false) {
|
|
unset($this->_configurations[$name]);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Gets an array of settings for the given named configuration in the current
|
|
* environment.
|
|
*
|
|
* @see lithium\core\Environment
|
|
* @param string $name Name of the configuration.
|
|
* @return array Settings of the named configuration.
|
|
*/
|
|
public function get($name = null) {
|
|
if ($name === null) {
|
|
$result = [];
|
|
$this->_configurations = array_filter($this->_configurations);
|
|
|
|
foreach ($this->_configurations as $key => $value) {
|
|
$result[$key] = $this->get($key);
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
$settings = &$this->_configurations;
|
|
|
|
if (!isset($settings[$name])) {
|
|
return null;
|
|
}
|
|
|
|
if (isset($settings[$name][0])) {
|
|
return $settings[$name][0];
|
|
}
|
|
$env = Environment::get();
|
|
|
|
$config = isset($settings[$name][$env]) ? $settings[$name][$env] : $settings[$name];
|
|
|
|
$method = is_callable($this->initConfig) ? $this->initConfig : null;
|
|
$settings[$name][0] = $method ? $method($name, $config) : $config;
|
|
return $settings[$name][0];
|
|
}
|
|
|
|
/**
|
|
* Clears all configurations.
|
|
*/
|
|
public function reset() {
|
|
$this->_configurations = [];
|
|
}
|
|
}
|
|
|
|
?>
|