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