mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
Add ability to create temporary Config copies
This commit is contained in:
parent
6b986cb17d
commit
024a0b90a9
@ -163,16 +163,44 @@ class Config {
|
|||||||
$_SINGLETONS['Config'] = $instance;
|
$_SINGLETONS['Config'] = $instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make the newly active Config be a copy of the current active Config instance.
|
||||||
|
*
|
||||||
|
* You can then make changes to the configuration by calling update and remove on the new
|
||||||
|
* value returned by Config::inst(), and then discard those changes later by calling unnest
|
||||||
|
*/
|
||||||
|
static public function nest() {
|
||||||
|
$current = self::$instance;
|
||||||
|
|
||||||
|
$new = clone $current;
|
||||||
|
$new->nestedFrom = $current;
|
||||||
|
self::set_instance($new);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change the active Config back to the Config instance the current active Config object
|
||||||
|
* was copied from
|
||||||
|
*/
|
||||||
|
static public function unnest() {
|
||||||
|
self::set_instance(self::$instance->nestedFrom);
|
||||||
|
}
|
||||||
|
|
||||||
protected $cache;
|
protected $cache;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Empty construction, otherwise calling singleton('Config') (not the right way to get the current active config
|
* Each copy of the Config object need's it's own cache, so changes don't leak through to other instances
|
||||||
* instance, but people might) gives an error
|
|
||||||
*/
|
*/
|
||||||
public function __construct() {
|
public function __construct() {
|
||||||
$this->cache = new Config_LRU();
|
$this->cache = new Config_LRU();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function __clone() {
|
||||||
|
$this->cache = clone $this->cache;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @var Config - The config instance this one was copied from when Config::nest() was called */
|
||||||
|
protected $nestedFrom = null;
|
||||||
|
|
||||||
/** @var [array] - Array of arrays. Each member is an nested array keyed as $class => $name => $value,
|
/** @var [array] - Array of arrays. Each member is an nested array keyed as $class => $name => $value,
|
||||||
* where value is a config value to treat as the highest priority item */
|
* where value is a config value to treat as the highest priority item */
|
||||||
protected $overrides = array();
|
protected $overrides = array();
|
||||||
|
Loading…
Reference in New Issue
Block a user