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; }
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(); }