Способ искоренить Config::Set в конфигах плагинов
Задача: при выполнении ветви конфига через include исключить изменение текущего конфига
сделал у себя так:
теперь чтобы получить доступ к корню глобального конфига из конфига плагина, надо просто добавить префикс "$root$"
например, для того чтобы сказать роутеру о новом экшне, вместо не православного Config::Set в конфиге плагина page можно написать православное
сделал у себя так:
Index: Config.class.php
===================================================================
--- Config.class.php (revision 50)
+++ Config.class.php (revision 119)
@@ -271,9 +271,25 @@
*/
static public function Set($sKey,$value,$sInstance=self::DEFAULT_CONFIG_INSTANCE) {
$aKeys=explode('.',$sKey);
+
+ if(isset($value['$root$']) && is_array($value['$root$'])){
+ $aRoot = $value['$root$'];
+ unset($value['$root$']);
+ foreach($aRoot as $sRk => $mRv){
+ self::Set(
+ $sRk,
+ self::isExist($sRk)
+ ? func_array_merge_assoc(Config::Get($sRk, $sInstance), $mRv)
+ : $mRv
+ ,
+ $sInstance
+ );
+ }
+ }
+
$sEval='self::getInstance($sInstance)->aConfig';
foreach ($aKeys as $sK) {
- $sEval.='['.var_export($sK, true).']';
+ $sEval.='['.var_export((string)$sK, true).']';
}
$sEval.='=$value;';
eval($sEval);
теперь чтобы получить доступ к корню глобального конфига из конфига плагина, надо просто добавить префикс "$root$"
например, для того чтобы сказать роутеру о новом экшне, вместо не православного Config::Set в конфиге плагина page можно написать православное
$config['$root$']['router']['page']['page'] = 'PluginPage_ActionPage';
4 комментария
А почему Config::Set неправославно? Имхо, наоборот, работает везде, не требует дополнительных соглашений и кода…
что надо сделать: заинклюдить файлики plugins/*/config/*.php и собрать return'ы от всех include'ов в массив
а в момент, когда мы include'им конфиги, есть вероятность, что содержащиеся в конфигах конструкции Config::Set могут поломать текущую конфигурацию