예제 #1
0
 protected static function resolve_chained_actions($actions)
 {
     $resolved = array();
     foreach ($actions as $actionpath => $action) {
         if (!$action instanceof DF_Web_Routing_Action_Chained) {
             continue;
         }
         if (!$action->is_endpoint()) {
             continue;
         }
         $chain = new DF_Web_Routing_ActionChain($action);
         $more = true;
         $chained = $action;
         $nextpath = $actionpath;
         $path = NULL;
         while ($more) {
             if ($path && "{$path}") {
                 $path = $chained->get_path_match()->append_path($path);
             } else {
                 $path = $chained->get_path_match();
             }
             # TODO implement recursion
             if ($chained->is_chained_root()) {
                 $more = false;
             } else {
                 $chainpath = $chained->get_chained();
                 if (!$chainpath) {
                     throw new DF_Web_Exception("Missing chained on action: {$nextpath}");
                 }
                 if ($chained = $actions["{$chainpath}"]) {
                     if (!$chained instanceof DF_Web_Routing_Action_Chained) {
                         throw new DF_Web_Exception("Action not chained: {$chainpath} ({$nextpath})");
                     }
                     $chain->add_to_chain($chained);
                     $nextpath = "{$chainpath}";
                 } else {
                     throw new DF_Web_Exception("Chained action not found: {$chainpath} ({$nextpath})");
                 }
             }
         }
         #error_log("Chain $action:\n".$chain->toDebugString());
         $resolved[] = $chain;
     }
     return $resolved;
 }
예제 #2
0
파일: Routing.php 프로젝트: hovenko/Madcow
 /**
  * 
  * 
  * @param unknown_type $actionpath
  * @param unknown_type $action
  * @param unknown_type $actions
  * @throws DF_Web_Exception
  * @return DF_Web_Routing_ActionChain
  */
 protected static function upgradeActionToActionChain($actionpath, $action, $actions)
 {
     if (!$action instanceof DF_Web_Routing_Action_Chained) {
         return NULL;
     }
     if (!$action->is_endpoint()) {
         return NULL;
     }
     $chain = new DF_Web_Routing_ActionChain($action);
     $more = TRUE;
     $chained = $action;
     $nextpath = $actionpath;
     $path = NULL;
     while ($more) {
         if ($path && "{$path}") {
             $path = $chained->get_path_match()->append_path($path);
         } else {
             $path = $chained->get_path_match();
         }
         # TODO implement recursion
         if ($chained->is_chained_root()) {
             $more = false;
         } else {
             $chainpath = $chained->get_chained();
             if (!$chainpath) {
                 throw new DF_Web_Exception("Missing chained on action: {$nextpath}");
             }
             if ($chained = $actions["{$chainpath}"]) {
                 if (!$chained instanceof DF_Web_Routing_Action_Chained) {
                     throw new DF_Web_Exception("Action not chained: {$chainpath} ({$nextpath})");
                 }
                 $chain->add_to_chain($chained);
                 $nextpath = "{$chainpath}";
             } else {
                 throw new DF_Web_Exception("Chained action not found: {$chainpath} ({$nextpath})");
             }
         }
     }
     return $chain;
 }