/** * Proceed with selected route * ------------------------------------------------------ * @param RouterPathObject $route */ private static final function doRoute(RouterPathObject $route) { // Add query params to Request self::$requestObject->__setQueryParameters(self::$routerQuery); // Create instance of Response $response = new Response(); // Put all data to output buffer for avoid any output except fired by Response->send(); ob_start(); // Set flag that output is buffered self::$outputType = 1; // ------------------------------------------------------------------------------------ // Start routing through Middleware if it's exists for this route // // Middleware need to continue route with executing next($req,$res) // ------------------------------------------------------------------------------------ if ($middleware = $route->getMiddleware()) { try { // Run Specific REST Method if Attached to PATH if ($func = $route->getEventForEventType(self::$routerMethod)) { $middleware->start(self::$requestObject, $response, $func); } elseif ($func = $route->getEventForEventType(0)) { $middleware->start(self::$requestObject, $response, $func); } elseif (self::$routerMethod == 6) { if ($omw = $route->getAttachedOptEvent()) { $omw->start(self::$requestObject, $response); } } else { self::doRouteError(404); } } catch (\Exception $e) { self::doRouteError($e->getCode(), $e->getMessage()); ob_clean(); return; } } else { // ------------------------------------------------------------------------------------ // If no middleware was defined for this route then // // Start routing by selecting method binded callable // ------------------------------------------------------------------------------------ // Select callable for current method if ($func = $route->getEventForEventType(self::$routerMethod)) { try { $func(self::$requestObject, $response); } catch (\Exception $e) { self::doRouteError($e->getCode(), $e->getMessage()); } } elseif ($func = $route->getEventForEventType(0)) { try { $func(self::$requestObject, $response); } catch (\Exception $e) { self::doRouteError($e->getCode(), $e->getMessage()); } } elseif (self::$routerMethod == 6) { if ($omw = $route->getAttachedOptEvent()) { $omw->start(self::$requestObject, $response); } } else { self::doRouteError(404); } } // Clean all data which echoed to output stream not by Response->send() ob_clean(); }