Exemple #1
0
 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();
 }
Exemple #2
0
 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
         */
     });
 }