/** * dispatch the router: check for all defined routes and call closures */ public static function dispatch() { $uri = strtok($_SERVER["REQUEST_URI"], '?'); $qs = parse_url($_SERVER["REQUEST_URI"], PHP_URL_QUERY); $method = $_SERVER['REQUEST_METHOD']; foreach (self::$routes as $name => $route) { $route = self::parsePattern($route); $matched = array(); if ($route == '' || preg_match('#' . $route . '#', $uri, $matched) && (self::$methods[$name] == 'ANY' || self::$methods[$name] == $method)) { array_shift($matched); if (self::$qs[$name] != '' && preg_match('#' . self::$qs[$name] . '#', $qs, $qsmatched)) { array_shift($qsmatched); $matched = array_merge($matched, $qsmatched); self::$catched[] = $name; //call_user_func_array(self::$callbacks[$name], $matched); BurpEvent::listen($name, self::$callbacks[$name]); BurpEvent::queue($name, $matched); } elseif (self::$qs[$name] == '') { self::$catched[] = $name; //call_user_func_array(self::$callbacks[$name], $matched); BurpEvent::listen($name, self::$callbacks[$name]); BurpEvent::queue($name, $matched); } } } //call missing if needed if (!is_null(self::$missing_callback)) { $diff = array_diff(self::$tocatch, self::$catched); if (count($diff) >= count(self::$tocatch)) { call_user_func(self::$missing_callback); BurpEvent::listen('missing', self::$callbacks[$name]); BurpEvent::fire('missing'); } } BurpEvent::flushAll(); }