diff --git a/lib/Pico.php b/lib/Pico.php index 11e0cd2..61399e5 100644 --- a/lib/Pico.php +++ b/lib/Pico.php @@ -246,6 +246,9 @@ class Pico */ public function run() { + // lock config + $this->config = is_array($this->config) ? $this->config : array(); + // load plugins $this->loadPlugins(); $this->triggerEvent('onPluginsLoaded', array(&$this->plugins)); @@ -418,7 +421,7 @@ class Pico $configFile = $this->getConfigDir() . 'config.php'; $config = file_exists($configFile) ? require($configFile) : null; - $this->config = is_array($config) ? $config + $defaultConfig : $defaultConfig; + $this->config += is_array($config) ? $config + $defaultConfig : $defaultConfig; if (empty($this->config['base_url'])) { $this->config['base_url'] = $this->getBaseUrl(); @@ -437,6 +440,29 @@ class Pico } } + /** + * Sets Picos config before calling Pico::run() + * + * This method allows you to modify Picos config without creating a + * {@path "config/config.php"} or changing some of its variables before + * Pico starts processing. It can only be called between the constructor + * call and Pico::run(). Options set with this method cannot be overwritten + * by {@path "config/config.php"}. + * + * @param array $config array with configuration variables, like + * $config in {@path "config/config.php"} + * @return void + * @throws RuntimeException thrown if Pico already started processing + */ + public function setConfig(array $config) + { + if ($this->config !== null) { + throw new RuntimeException('You cannot modify Picos config after processing has started'); + } + + $this->config = $config; + } + /** * Returns either the value of the specified config variable or * the config array