public function redirectToLoad($load, $args, $statusCode = 200)
 {
     $this->setStatusCode($statusCode);
     if (isset($args)) {
         NgsArgs::getInstance()->setArgs($args);
     }
     $actionArr = NGS()->getRoutesEngine()->getLoadORActionByAction($load);
     NGS()->getDispatcher()->loadPage($actionArr["action"]);
 }
 /**
  * this method manage mathced routes
  *
  * @param array $routesArr
  *
  * @return void
  */
 public function dispatch()
 {
     try {
         $routesArr = NGS()->getRoutesEngine()->getDynamicLoad(NGS()->getHttpUtils()->getRequestUri());
         if ($routesArr["matched"] === false) {
             throw new NotFoundException("Load/Action Not found");
         }
         if (isset($routesArr["args"])) {
             NgsArgs::getInstance()->setArgs($routesArr["args"]);
         }
         switch ($routesArr["type"]) {
             case 'load':
                 NGS()->getTemplateEngine();
                 $this->loadPage($routesArr["action"]);
                 break;
             case 'action':
                 NGS()->getTemplateEngine();
                 $this->doAction($routesArr["action"]);
                 break;
             case 'file':
                 $this->streamStaticFile($routesArr);
                 break;
         }
     } catch (DebugException $ex) {
         if (NGS()->getEnvironment() != "production") {
             $ex->display();
             return;
         }
         $routesArr = NGS()->getRoutesEngine()->getNotFoundLoad();
         if ($routesArr == null) {
             echo "404 :)";
             exit;
         }
         $this->loadPage($routesArr["action"]);
     } catch (RedirectException $ex) {
         NGS()->getHttpUtils()->redirect($ex->getRedirectTo());
     } catch (NotFoundException $ex) {
         if ($ex->getRedirectUrl() != "") {
             NGS()->getHttpUtils()->redirect($ex->getRedirectUrl());
             return;
         }
         $routesArr = NGS()->getRoutesEngine()->getNotFoundLoad();
         if ($routesArr == null) {
             echo "404 :)";
             exit;
         }
         $this->loadPage($routesArr["action"]);
     }
 }
 /**
  * in this method implemented
  * nested load functional
  *
  * @abstract
  * @access public
  * @param String $namespace
  * @param array $loadArr
  *
  * @throws NoAccessException
  *
  * @return void
  */
 public final function nest($namespace, $loadArr)
 {
     $actionArr = NGS()->getRoutesEngine()->getLoadORActionByAction($loadArr["action"]);
     $loadObj = new $actionArr["action"]();
     //set that this load is nested
     $loadObj->setIsNestedLoad(true);
     $loadObj->setNgsWrappingLoad($this);
     if (isset($loadArr["args"])) {
         NgsArgs::getInstance()->setArgs($loadArr["args"]);
     }
     $loadObj->setLoadName($loadArr["action"]);
     $loadObj->initialize();
     if (NGS()->getSessionManager()->validateRequest($loadObj) === false) {
         $loadObj->onNoAccess();
     }
     $loadObj->service();
     if (NGS()->isJsFrameworkEnable() && NGS()->getHttpUtils()->isAjaxRequest()) {
         NGS()->getLoadMapper()->setNestedLoads($this->getLoadName(), $loadArr["action"], $loadObj->getJsonParams());
     }
     if (!isset($this->params["inc"])) {
         $this->params["inc"] = array();
     }
     $this->setNestedLoadParams($namespace, $loadArr["action"], $loadObj);
     $this->params = array_merge($this->getParams(), $loadObj->getParentParams());
 }
 public function args()
 {
     return NgsArgs::getInstance();
 }