代码点火器:未路由请求的默认控制器

时间:2016-05-17 12:56:38

标签: php codeigniter

我有一个CI设置,其中URL可以调用特定的控制器,或者应该转发到没有这样的控制器的全能控制器。类似于switch语句中的default。例子:

domain/real-controller          //<-- handled by controllers/Real-controller.php
domain/another-real-controller  //<-- controllers/Another-real-controller.php
domain/foobar                   //<-- no such controller; forwarded to a catch-all

我知道重新路由,但我做不到

$route['(:any)'] = 'catchall_controller'

因为这将(可能)阻止对合法控制器的要求。

我可能会对404处理做一些hacky,但我想知道是否有更好的方法。 任何人都知道吗?

3 个答案:

答案 0 :(得分:2)

由于这个控制器是一个&#34; catch all&#34;,它几乎就是404页面所做的事情。在这种情况下,您可以在路线中执行此操作:

$route['default_controller'] = 'welcome';
$route['404_override'] = 'catchall_controller';
$route['translate_uri_dashes'] = TRUE;

答案 1 :(得分:0)

您可以使用$route['(:any)'] = 'catchall_controller',但必须将它放在routes.php文件的末尾:)。

因此,在前往拥有catchall_controller的最后一行之前,可以完成所有其他路由器/控制器。

答案 2 :(得分:0)

在codeigniter 2中,(:any)适用于所有参数,但在codeigniter 3中,这会被更改。将您的路线更改为:

$route['(.*)'] = 'catchall_controller';