public function get_from() { //check if parameters of the from have a regex pattern to put in their place //if not, they will be a (:any) if (is_null($this->from)) { $pattern_list = array(); $substitution_list = array(); $named_route_substitution_list = array(); $pattern_num = 1; foreach ($this->parameters as $parameter => $data) { $value = $data['value']; //if there is a question mark in the parameter //we will add a scape \ for the regex $pattern_list[] = '/\\{' . $parameter . '\\}/'; //if parameter is null will check if there is a global parameter, if not, //we will put an (:any) if (is_null($value)) { $pattern_value = Route::get_pattern($parameter); if (!is_null($pattern_value)) { if ($pattern_value[0] != '(' && $pattern_value[strlen($pattern_value) - 1] != ')') { $pattern_value = '(' . $pattern_value . ')'; } $substitution_list[] = $pattern_value; } else { $substitution_list[] = '(:any)'; } } else { if ($value[0] != '(' && $value[strlen($value) - 1] != ')') { $value = '(' . $value . ')'; } $substitution_list[] = $value; } $named_route_substitution_list[] = '\\$' . $pattern_num; $pattern_num += 1; } // check for named subdomains if (array_key_exists('subdomain', $this->options)) { $i = preg_match('/^\\{(.+)\\}$/', $this->options['subdomain']); if ($i > 0) { preg_match('/^\\{(.+)\\}$/', $this->options['subdomain'], $check); $subdomain = $check[1]; if (!array_key_exists($subdomain, $this->parameters)) { $pattern_value = Route::get_pattern($subdomain); if (!is_null($pattern_value)) { $this->options['subdomain'] = $pattern_value; } else { $this->options['subdomain'] = '(:any)'; } } else { $value = $this->parameters[$subdomain]['value']; $this->options['subdomain'] = $value; } } else { $this->options['checked_subdomain'] = $this->options['subdomain']; unset($this->options['subdomain']); } } // make substitutions to make codeigniter comprensible routes $this->from = preg_replace($pattern_list, $substitution_list, $this->pre_from); // make substitutions in case there is a named route // Are we saving the name for this one? if (isset($this->options['as']) && !empty($this->options['as'])) { $named_route = preg_replace($pattern_list, $named_route_substitution_list, $this->pre_from); Route::set_name($this->options['as'], $named_route); } } return $this->from; }
public static function set($name, $uri_callback = NULL, $regex = NULL) { $route = new Route($uri_callback, $regex); $route->set_name($name); return Route::$_routes[$name] = $route; }