Ensure Configure::boostrap() doesn't overwrite existing configs under 'App' key.

Fixes #3874
This commit is contained in:
ADmad 2013-07-31 13:54:51 +05:30
parent 6da0a37e11
commit b7cee8ff57
3 changed files with 36 additions and 11 deletions

View file

@ -67,13 +67,7 @@ class Configure {
*/
public static function bootstrap($boot = true) {
if ($boot) {
self::write('App', array(
'base' => false,
'baseUrl' => false,
'dir' => APP_DIR,
'webroot' => WEBROOT_DIR,
'www_root' => WWW_ROOT
));
self::_appDefaults();
if (!include APP . 'Config' . DS . 'core.php') {
trigger_error(__d('cake_dev', "Can't find application core file. Please create %score.php, and make sure it is readable by PHP.", APP . 'Config' . DS), E_USER_ERROR);
@ -109,6 +103,20 @@ class Configure {
}
}
/**
* Set app's default configs
* @return void
*/
protected static function _appDefaults() {
self::write('App', (array)self::read('App') + array(
'base' => false,
'baseUrl' => false,
'dir' => APP_DIR,
'webroot' => WEBROOT_DIR,
'www_root' => WWW_ROOT
));
}
/**
* Used to store a dynamic variable in Configure.
*

View file

@ -69,6 +69,23 @@ class ConfigureTest extends CakeTestCase {
Configure::drop('test');
}
/**
* Test to ensure bootrapping doesn't overwrite prior configs set under 'App' key
* @return void
*/
public function testBootstrap() {
$expected = array(
'foo' => 'bar'
);
Configure::write('App', $expected);
Configure::bootstrap(true);
$result = Configure::read('App');
$this->assertEquals($expected['foo'], $result['foo']);
$this->assertFalse($result['base']);
}
/**
* testRead method
*

View file

@ -150,10 +150,6 @@ App::uses('Cache', 'Cache');
App::uses('Object', 'Core');
App::uses('Multibyte', 'I18n');
App::$bootstrapping = true;
Configure::bootstrap(isset($boot) ? $boot : true);
/**
* Full URL prefix
*/
@ -172,6 +168,10 @@ if (!defined('FULL_BASE_URL')) {
unset($httpHost, $s);
}
App::$bootstrapping = true;
Configure::bootstrap(isset($boot) ? $boot : true);
if (function_exists('mb_internal_encoding')) {
$encoding = Configure::read('App.encoding');
if (!empty($encoding)) {