public static function run() { $request = new Request($_SERVER['QUERY_PATH']); $response = new Response(); $router = new Router($request); $callable = $router->route(); $input = new RequestBuilder($request); $output = new ResponseBuilder(); MiddlewareManager::getInstance()->before($input, $output, $callable); $return = FrontController::getInstance()->setController($callable->controller)->setAction($callable->action)->setParams($input, $output)->exec(); if ($return instanceof ResponseBuilder) { $output = $return; } else { $output->body = $return; } MiddlewareManager::getInstance()->after($input, $output, $callable); $response->send($output); }
private function resolve(array $source, RequestBuilder &$req, ResponseBuilder &$res, \stdClass &$call) { if ($source) { foreach ($source as $mwobject) { $class = '\\olifant\\middleware\\' . $mwobject; $middle = new $class(); $instance = '\\olifant\\middleware\\MiddlewareBase'; if (false === is_subclass_of($middle, $instance)) { throw new AppException('Class ' . $class . ' is not instanceof ' . $instance); } if (isset($middle->path) or isset($middle->exceptPath)) { $uri = rawurldecode(Request::cleanUri($req->path)); $mode = isset($middle->path) ? false : (isset($middle->exceptPath) ? true : false); $target = isset($middle->path) ? $middle->path : (isset($middle->exceptPath) ? $middle->exceptPath : null); if (is_array($target)) { $match = false; foreach ($target as $p) { if (Router::compare($p, $uri)) { $match = true; break; } } if ($mode === $match) { continue; } } else { if ($mode === Router::compare($target, $uri)) { continue; } } } call_user_func_array(array($middle, 'handle'), array($req, $res, $call)); } } return $this; }