Способ искоренить Config::Set в конфигах плагинов

Задача: при выполнении ветви конфига через include исключить изменение текущего конфига

сделал у себя так:
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 комментария

avatar
Не понял задачу. Для чего оно нужно в реальной жизни? Чтобы текущий конфиг не изменялся, надо просто не юзать Config::Set в подключаемых конфигах.

А почему Config::Set неправославно? Имхо, наоборот, работает везде, не требует дополнительных соглашений и кода…
avatar
ок. например, есть задача собрать все исходные настройки всех плагинов в массив.
что надо сделать: заинклюдить файлики plugins/*/config/*.php и собрать return'ы от всех include'ов в массив

а в момент, когда мы include'им конфиги, есть вероятность, что содержащиеся в конфигах конструкции Config::Set могут поломать текущую конфигурацию
avatar
Это каким-то образом реализовано в движке? Или по-прежнему Set надо юзать?
avatar
да, еще с версии 0.5
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.