/** * Lookup routing rules * * @return array returns combined array, FALSE if any pattern is matched. */ public function route(Charcoal_IRequest $request, Charcoal_IRoutingRule $rule) { // Get path info //$request_uri = $_SERVER["REQUEST_URI"]; //$script_name = $_SERVER["SCRIPT_NAME"]; //$dir_name = dirname($script_name); //$pos = strpos( $request_uri, $dir_name ); //$url = substr( $request_uri, $pos + strlen($dir_name) ); $url = rtrim($_SERVER["REQUEST_URI"], '/'); log_info('debug,router', "routing started. URL=[{$url}]"); $proc_key = $this->getSandbox()->getProfile()->getString('PROC_KEY', 'proc'); $rule_keys = $rule->getKeys(); if ($rule_keys && is_array($rule_keys)) { log_info('debug,router', "rule keys=[" . implode(",", $rule_keys) . "]"); foreach ($rule_keys as $pattern) { $proc = $rule->getProcPath(s($pattern)); log_info('debug,router', "pattern=[{$pattern}] proc=[{$proc}]"); if ($proc) { log_info('debug,router', "testing pattern=[{$pattern}] url=[{$url}]"); $params = self::_match($pattern, $url); log_info('debug,router', "params:" . print_r($params, true)); // match if ($params !== NULL) { $request->setArray($params); $request->set($proc_key, $proc); log_info('debug,router', "routing rule matched! pattern=[{$pattern}] proc_path=[{$proc}]"); $result = array('proc' => $proc, 'params' => $params, 'pattern' => $pattern); return $result; } } } log_warning('system,debug,router', "no routing rule is matched."); } else { log_warning('system,debug,router', "routing rule are not defined."); } return FALSE; }
/** * Copy parameters from request object. All of container elements will be overwrited. * * @param Charcoal_IRequest $request Request object to set */ public function setRequest($request) { // Charcoal_ParamTrait::validateIsA( 1, 'Charcoal_IRequest', $request ); $this->values = $request->getAll(); }