summaryrefslogtreecommitdiffstats
path: root/system
diff options
context:
space:
mode:
authorGDmac <grdalenoort@gmail.com>2013-11-11 13:15:18 +0100
committerGDmac <grdalenoort@gmail.com>2013-11-11 13:15:18 +0100
commit5d9b03b022bbc95c3c57830cc4cc27c39c7a59be (patch)
tree9f03a708761e0ac429a0ed080d2eef593e4694a0 /system
parent01e9fb1d6aab8e513a9ebd786e9abff74d8b63ca (diff)
parentc761a206def7714d18623d46b05adc2bbeedce21 (diff)
Merge branch 'develop' of https://github.com/EllisLab/CodeIgniter into develop
Diffstat (limited to 'system')
-rw-r--r--system/core/Router.php29
1 files changed, 27 insertions, 2 deletions
diff --git a/system/core/Router.php b/system/core/Router.php
index 0f7278ae6..d467d60fd 100644
--- a/system/core/Router.php
+++ b/system/core/Router.php
@@ -345,15 +345,40 @@ class CI_Router {
// Turn the segment array into a URI string
$uri = implode('/', $this->uri->segments);
+ // Get HTTP verb
+ $http_verb = isset($_SERVER['REQUEST_METHOD']) ? strtolower($_SERVER['REQUEST_METHOD']) : 'cli';
+
// Is there a literal match? If so we're done
- if (isset($this->routes[$uri]) && is_string($this->routes[$uri]))
+ if (isset($this->routes[$uri]))
{
- return $this->_set_request(explode('/', $this->routes[$uri]));
+ // Check default routes format
+ if (is_string($this->routes[$uri]))
+ {
+ return $this->_set_request(explode('/', $this->routes[$uri]));
+ }
+ // Is there a matching http verb?
+ elseif (is_array($this->routes[$uri]) && isset($this->routes[$uri][$http_verb]))
+ {
+ return $this->_set_request(explode('/', $this->routes[$uri][$http_verb]));
+ }
}
// Loop through the route array looking for wildcards
foreach ($this->routes as $key => $val)
{
+ // Check if route format is using http verb
+ if (is_array($val))
+ {
+ if (isset($val[$http_verb]))
+ {
+ $val = $val[$http_verb];
+ }
+ else
+ {
+ continue;
+ }
+ }
+
// Convert wildcards to RegEx
$key = str_replace(array(':any', ':num'), array('[^/]+', '[0-9]+'), $key);