2016-05-17 62 views
0

我有一个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处理做一些黑客行为,但我想知道是否有更好的方法。 任何人都知道吗?

+0

为什么不是''route ['default_controller'] = catchall_controller';'? – splash58

+0

正在使用,以确保前往'www.domain'加载主页。我想我可以设置一个全部的默认控制器,如果没有参数传递,加载主页。只是在这里大声思考。 – Utkanos

+0

您使用的是什么版本的Codeigniter? – CodeGodie

回答

0

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

因此,每个其他路由器/控制器都可以在到达具有您的catchall_controller的最后一行之前完成。

+0

我想这可能不是他想要的。重点不在于创建完整的路线列表,只需要一个“默认”或“全部捕捉”路线。 – CodeGodie

+0

谢谢你的帮助。不过,我同意评论者的意见。 – Utkanos

0

在codeigniter 2中,(:any)适用于所有参数,但在codeigniter 3中这是变化的。改变你的路线为:

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

为什么这个工作?提供解释。这与$ route ['(:any)']'有什么不同? – CodeGodie

+1

在codeigniter 2中(:任何)工作的所有参数,但在codeigniter 3这是变化 看到在这里通过周长http://stackoverflow.com/questions/37111876/unlimited-parameters-get-last-one/ 37113315#37113315 –

+0

谢谢你的帮助。 – Utkanos

2

由于这个控制器是一个“全部抓住”,那么它几乎是在做一个404页面。在这种情况下,您可以在您的路线中执行此操作:

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

但仍然会发送404头,但?我通过让一个“网守”默认控制器跳转到主页*绕过了这个问题,除非*令牌被通过了。 +1,但。 – Utkanos

+1

它不会发送404头,除非你指定它。作为@CodeGodie指出, – CodeGodie

+0

,这个解决方案将工作 – manniL