Пример #1
0
 public function init($name, $action, $settings = array(), $extra = array())
 {
     $this->name = $name;
     $this->controllerPathname = Z_String::camel2under($name);
     //
     // Handle settings set by router
     //
     if (!empty($settings['directory'])) {
         $this->directory = $settings['directory'] . '/';
     }
     foreach ($extra as $key => $val) {
         $this->routeVariables[$key] = $val;
     }
     $this->action = $action;
 }
Пример #2
0
 public function processRequest($request, $response, &$bProcessed)
 {
     $request_uri = $_SERVER['REQUEST_URI'];
     $script_name = $_SERVER['SCRIPT_NAME'];
     $tmp = explode('?', $request_uri, 2);
     $request_uri = $tmp[0];
     if (substr($request_uri, -1) == '/') {
         $request_uri = substr($request_uri, 0, strlen($request_uri) - 1);
     }
     $parts = explode('/', $request_uri);
     $cntx = Z_String::countOccurances($script_name, '/');
     for ($i = 0; $i < $cntx; $i++) {
         array_shift($parts);
     }
     if (substr($request_uri, 0, strlen($script_name)) == $script_name) {
         return false;
     }
     foreach ($this->_routes as $route) {
         $break = false;
         $mvc = array();
         if (is_array($route)) {
             $mvc = $route[1];
             $route = $route[0];
         }
         if (is_string($route)) {
             $route_parts = explode('/', $route);
             array_shift($route_parts);
             $match = false;
             $cnt = 0;
             $varNames = array();
             $varValues = array();
             if ($route == '') {
                 $match = true;
             }
             if (count($route_parts) > count($parts)) {
                 $match = false;
             } else {
                 foreach ($route_parts as $part) {
                     if (substr($part, 0, 1) == ':' && substr($part, -1) == ':' && Z_String::countOccurances($part, ':') == 2) {
                         $match = true;
                         $varNames[] = substr($part, 1, strlen($part) - 2);
                         $varValues[] = $parts[$cnt];
                     } elseif ($part == $parts[$cnt]) {
                         $match = true;
                     } else {
                         $match = false;
                     }
                     if (!$match) {
                         $rpart = $part;
                         $varStart = count($varValues);
                         $tmp = explode(':', $part);
                         $skip = true;
                         foreach ($tmp as $px) {
                             if ($skip) {
                                 $skip = false;
                                 continue;
                             } else {
                                 $skip = true;
                             }
                             $varNames[] = $px;
                             $rpart = str_replace(":{$px}:", "((?:[a-z0-9][a-z0-9]*))", $rpart);
                         }
                         // See if it is preg match
                         if ($c = preg_match_all("/" . $rpart . "/is", $parts[$cnt], $matches)) {
                             for ($i = 0; $i < count($matches); $i++) {
                                 if ($i == 0) {
                                     continue;
                                 }
                                 $varValues[$varStart + $i - 1] = $matches[$i][0];
                             }
                             $match = true;
                             $cnt++;
                             continue;
                         }
                         break;
                     }
                     $cnt++;
                 }
             }
             if ($match) {
                 for ($x = 0; $x < count($varNames); $x++) {
                     $varName = str_replace(':', '', $varNames[$x]);
                     $varValue = $varValues[$x];
                     switch ($varName) {
                         case 'action':
                             if ($varValue == '') {
                                 continue;
                             }
                             $request->SetAction($varValue);
                             break;
                         case 'controller':
                             if ($varValue == '') {
                                 continue;
                             }
                             $request->SetController($varValue);
                             break;
                         case 'module':
                             if ($varValue == '') {
                                 continue;
                             }
                             $request->SetModule($varValue);
                             break;
                         default:
                             $request->{$varName} = $varValue;
                             break;
                     }
                 }
                 foreach ($mvc as $varName => $varValue) {
                     switch ($varName) {
                         case 'action':
                             if ($varValue == '') {
                                 continue;
                             }
                             $request->SetAction($varValue);
                             break;
                         case 'controller':
                             if ($varValue == '') {
                                 continue;
                             }
                             $request->SetController($varValue);
                             break;
                         case 'module':
                             if ($varValue == '') {
                                 continue;
                             }
                             $request->SetModule($varValue);
                             break;
                     }
                 }
             }
         }
     }
     return array();
 }