public static function &find($name, $value) { $right = Sequence::right($name); return Controller::run(static::$layers, function &(&$layer) use($right, $value) { if (Sequence::get($layer, $right) == $value) { return $layer; } $r = null; return $r; }); }
public static function init() { $query = urldecode($_SERVER['REQUEST_URI']); header('Infrajs-Cache: true'); $html = Access::cache(__FILE__ . ':init', function ($query) { header('Infrajs-Cache: false'); Config::get(); $conf = Config::get('controller'); return Controller::check($conf['index']); }, array($query)); echo $html; exit; }
public static function apply() { //Поиск совпадения адреса с файлом //Редирект также кэшируется в modified, когда обращение к статике, по правилам Nostore Path::init(); //Контроллер... должен быть файл в корне index.json //Если сайт не использует контроллер то до этого места доходим только, когда 404 и лишний запуск не существенен //Либо следующая строчка обеспечивает формирование всего html если контроллер используется. $query = substr(urldecode($_SERVER['REQUEST_URI']), 1); $ch = substr($query, 0, 1); if (!in_array($ch, ['~', '!', '-'])) { Controller::init(); } $conf = Config::get('router'); Path::req($conf['404']); }
return; } $layer['div'] = Template::parse(array($layer['divtpl']), $layer); }, 'div:env,config,external'); Event::handler('layer.isshow', function (&$layer) { if (empty($layer['div']) && !empty($layer['parent'])) { return false; } //Такой слой игнорируется, события onshow не будет, но обработка пройдёт дальше у других дивов $start = false; if (Run::exec(Controller::$layers, function (&$l) use(&$layer, &$start) { //Пробежка не по слоям на ветке, а по всем слоям обрабатываемых после.. .то есть и на других ветках тоже if (!$start) { if (Each::isEqual($layer, $l)) { $start = true; } return; } if (@$l['div'] !== @$layer['div']) { return; } //ищим совпадение дивов впереди if (Controller::fire('layer.isshow', $l)) { $layer['is_save_branch'] = Layer::isParent($l, $layer); return true; //Слой который дальше показывается в томже диве найден } })) { return false; } }, 'div:is');
<?php namespace infrajs\controller; use infrajs\ans\Ans; use infrajs\path\Path; use infrajs\view\View; use infrajs\load\Load; use infrajs\router\Router; if (!is_file('vendor/autoload.php')) { chdir('../../../../'); require_once 'vendor/autoload.php'; Router::init(); } $query = Crumb::$href; $ans = array('title' => 'Проверки контроллера'); $composer = Load::loadJSON('-infrajs/composer.json'); $require = $composer['require']; foreach ($require as $path => $ver) { $p = explode('/', $path); $r = Path::reqif('-' . $p[1] . '/infra.php'); } $layer = array('data' => 1, 'tpl' => array('qewr{data}')); Crumb::change(''); $html = Controller::check($layer); if ($html != 'qewr1') { return Ans::err($ans, 'Результат неожиданный ' . $html); } Crumb::change($query); View::html('', true); return Ans::ret($ans);
namespace infrajs\controller; use infrajs\config\Config; use infrajs\path\Path; use infrajs\view\View; use infrajs\load\Load; use infrajs\ans\Ans; if (!is_file('vendor/autoload.php')) { chdir('../../../../'); require_once 'vendor/autoload.php'; } $ans = array(); $ans['title'] = 'check4'; $query = Crumb::$query; Config::get('controller'); View::html('<div id="main1"></div><div id="main2"></div>', true); $layers = Load::loadJSON('-test-akiyatkin/resources/check4.json'); Crumb::change('test'); Controller::check($layers); $html = View::html(); preg_match_all('/x/', $html, $matches); $count = sizeof($matches[0]); $countneed = 2; Crumb::change($query); Layer::$start_id = 1; Layer::$ids = array(); View::html('', true); if ($count != $countneed) { return Ans::err($ans); } return Ans::ret($ans);