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