public static function exec() { if (!Update::$is) { Config::add('update', function ($name, $value, $conf) { if (!Update::$is) { return; } Path::req('-' . $name . '/' . $value); }); } Update::$is = true; //Пр появлении нового Config::get будет проверяться свойство update //Но нужно установить то что уже было установлено $conf = Config::$conf; foreach ($conf as $name => $v) { Update::update($name); } //И вообще всё установить нужно что ещё не установлено Config::get(); }
public static function init() { Once::exec(__FILE__ . '::init', function () { @header('Infrajs-Config-All: false'); require_once 'vendor/infrajs/path/Path.php'; spl_autoload_register(function ($class_name) { $p = explode('\\', $class_name); if (sizeof($p) < 3) { return; } //Ищем имя расширения по переданному полному адресу до Класса //Ситуация с именем расширения //infrajs/path/Path - path //infrajs/path/src/URN - path //infrajs/config/search/Search - config-search Search //infrajs/config/search/Search - config search/Search //infrajs/config/Search - config src/Search //path/Path - path //path/src/URN - path //config/search/Search - config-search $vendor = array_shift($p); $class = array_pop($p); $name = implode('-', $p); while (!Path::theme('-' . $name . '/') && sizeof($p) > 1) { array_pop($p); $name = implode('-', $p); } if (!empty(Config::$exec[$name])) { return; } if (!Path::theme('-' . $name . '/')) { return; } Config::$exec[$name] = true; spl_autoload_call($class_name); Config::get($name); // <- Всё ради автоматического этого }, true, true); //set_error_handler( function () { //bugfix // ini_set('display_errors', true); //}); Config::add('conf', function ($name, $value, &$conf) { $valconf = $value::$conf; foreach ($conf as $k => $v) { $valconf[$k] = $v; } //merge нужно делать с сохранением ключей, даже для числовых ключей $conf = $valconf; //$conf=array_merge($value::$conf, $conf); //Второй массив важнее его значения остаются $value::$conf =& $conf; }); Config::add('clutch', function ($name, $value, &$conf) { //Имя расширения в котором найдено свойство, значение, весь конфиг того расширения //$dir = Path::theme('-'.$name.'/'); foreach ($value as $plugin => $paths) { Each::exec($paths, function &($dir) use($plugin, &$conf) { if (empty(Path::$conf['clutch'][$plugin])) { Path::$conf['clutch'][$plugin] = []; } if (!in_array($dir, Path::$conf['clutch'][$plugin])) { Path::$conf['clutch'][$plugin][] = $dir; } Config::load($dir . $plugin . '/.infra.json', $plugin); $r = null; return $r; }); } //Path::$conf['clutch'][] = $value; }); Config::load('.infra.json'); Config::load('~.infra.json'); //Конфиг в кэш папке генерируется автоматически это единственный способ попасть в стартовую обраотку нового расширения. Для clutch Config::load('!.infra.json'); Config::get('path'); Config::get('config'); Config::get('each'); Config::get('hash'); Config::get('once'); Config::get('load'); Config::get('ans'); /* echo '<pre>'; print_r(get_declared_classes()); exit; Debug проврить классы каких расширений после композера загружены и в ручную инициализировать их конфиги [132] => infrajs\config\Config [133] => infrajs\once\Once [134] => infrajs\hash\Hash [135] => infrajs\path\Path [136] => infrajs\load\Load [137] => infrajs\each\Each [138] => infrajs\ans\Ans */ }); }