diff options
author | Phil Sturgeon <email@philsturgeon.co.uk> | 2010-12-15 16:18:16 +0100 |
---|---|---|
committer | Phil Sturgeon <email@philsturgeon.co.uk> | 2010-12-15 16:18:16 +0100 |
commit | 23174a64277cad04c89d943fa65694299f7424d6 (patch) | |
tree | 7f8cb3089d91d3fdc53ec932f7132a4ab8ef1db7 | |
parent | fb5523855cb0592abe8e8720d7019fa82acfb054 (diff) |
['404_override'] can now take methods and URI segments, not just a controller name. This is useful for 404 pages on errors/page_missing or /pages/view/404.
-rw-r--r-- | application/config/routes.php | 9 | ||||
-rw-r--r-- | system/core/Router.php | 14 |
2 files changed, 14 insertions, 9 deletions
diff --git a/application/config/routes.php b/application/config/routes.php index 614462fd9..5f9a58343 100644 --- a/application/config/routes.php +++ b/application/config/routes.php @@ -23,16 +23,23 @@ | RESERVED ROUTES | ------------------------------------------------------------------------- | -| There is one reserved routes: +| There area two reserved routes: | | $route['default_controller'] = 'welcome'; | | This route indicates which controller class should be loaded if the | URI contains no data. In the above example, the "welcome" class | would be loaded. +| +| $route['404_override'] = 'errors/page_missing'; +| +| This route will tell the Router what URI segments to use if those provided +| in the URL cannot be matched to a valid route. +| */ $route['default_controller'] = "welcome"; +$route['404_override'] = ''; /* End of file routes.php */ diff --git a/system/core/Router.php b/system/core/Router.php index 9276800c3..79a8b4fcc 100644 --- a/system/core/Router.php +++ b/system/core/Router.php @@ -270,19 +270,17 @@ class CI_Router { // If we've gotten this far it means that the URI does not correlate to a valid // controller class. We will now see if there is an override - if (isset($this->routes['404_override']) AND $this->routes['404_override'] != '') + if (!empty($this->routes['404_override'])) { - if (strpos($this->routes['404_override'], '/') !== FALSE) - { - $x = explode('/', $this->routes['404_override']); + $x = explode('/', $this->routes['404_override']); - $this->set_class($x[0]); - $this->set_method($x[1]); + $this->set_class($x[0]); + $this->set_method(isset($x[1]) ? $x[1] : 'index'); - return $x; - } + return $x; } + // Nothing else to do at this point but show a 404 show_404($segments[0]); } |