/** * function that execute a task * @param string * @param [array] * @return void **/ public static function exec(string $task, array $args = null) : bool { if (!isset(self::$tasks[$task])) { throw new Exception('Task doesn\'t exists : ' . $task); } if (!empty(self::$depens[$task])) { foreach (self::$depens[$task] as $depen) { if (icontain($depen, 'before:')) { self::exec(explode(':', $depen)[1], $args); } elseif (!icontain($depen, 'after:')) { self::exec($depen, $args); } } } $state = self::$tasks[$task]($args); if (!empty(self::$depens[$task])) { foreach (self::$depens[$task] as $depen) { if (icontain($depen, 'after:')) { Task::exec(explode(':', $depen)[1], $args); } } } return $state; }
/** * function that launch the controller associate to the url * @param string * @param array * @return bool **/ public static function run(string $url, array $args) : bool { // ------------------------------------------------------------------------ // match with no parameter(s) foreach (self::$routes as $key => $route) { if (preg_match('#^' . $key . '$#', $url)) { $args['url'] = $url; foreach ($route['depens'] as $depen) { if (icontain($depen, 'before:')) { Task::exec(explode(':', $depen)[1], $args); } elseif (!icontain($depen, 'after:')) { Task::exec($depen, $args); } } $state = $route['func']($args); foreach ($route['depens'] as $depen) { if (icontain($depen, 'after:')) { Task::exec(explode(':', $depen)[1], $args); } } return $state; } } // ------------------------------------------------------------------------ // match route with parameter(s) foreach (self::$routes as $key => $route) { if (preg_match('#:#', $key)) { $urls = explode('/', $url); $keys = explode('/', $key); $error = false; if (count($urls) != count($keys)) { continue; } $urlbuild = ''; for ($i = 0; $i < count($urls); ++$i) { if (preg_match('#:#', $keys[$i])) { $urlbuild .= $keys[$i] . '/'; } else { $urlbuild .= $urls[$i] . '/'; } } $urlbuild = substr($urlbuild, 0, -1); $urlbuild = str_replace('\\', '', $urlbuild); if (!preg_match('#^' . $key . '$#', $urlbuild)) { continue; } $args = []; $args['url'] = $url; for ($i = 0; $i < count($urls); ++$i) { if (preg_match('#:#', $keys[$i])) { $args[str_replace([':', '\\'], '', $keys[$i])] = $urls[$i]; } } foreach ($route['depens'] as $depen) { if (icontain($depen, 'before:')) { Task::exec(explode(':', $depen)[1], $args); } elseif (!icontain($depen, 'after:')) { Task::exec($depen, $args); } } $state = $route['func']($args); foreach ($route['depens'] as $depen) { if (icontain($depen, 'after:')) { Task::exec(explode(':', $depen)[1], $args); } } return $state; } } // ------------------------------------------------------------------------ // match no route if (!empty(self::$routes['404'])) { $args['url'] = '404'; $func = self::$routes['404']['func']; foreach ($routes['404']['depens'] as $depen) { if (icontain($depen, 'before:')) { Task::exec(explode(':', $depen)[1], $args); } elseif (!icontain($depen, 'after:')) { Task::exec($depen, $args); } } $state = $routes['404']['func']($args); foreach ($routes['404']['depens'] as $depen) { if (icontain($depen, 'after:')) { Task::exec(explode(':', $depen)[1], $args); } } return $state; } else { echo 'Cannot GET or POST ' . $url; } return false; }