我是Codeigniter的最近用户,正在开发一个简单的后端CMS来管理页面。
基于URL(在本例中我隐藏了“index.php”):mysite.com/pagename
我希望系统检测我的数据库中是否存在“pagename”的值,如果有,我需要系统重新路由到自定义控制器(例如:Pagemaker)并且如果没有记录调用pagename,只是这样做是正常的(即找到一个名为pagename的控制器)
目前我有:
$route['(:any)'] = "pagemaker/create/$1";
将所有请求转发到我的自定义函数。
但是我想更改此结构,以便如果数据库中不存在该页面,则遵循传统的codeigniter请求过程。
有人可以提供有关如何完成此操作的任何建议吗?或者有关在codeigniter中路由自定义CMS的任何建议吗?
答案 0 :(得分:1)
最好的解决方案是upgrade to CI 2.0,因为it's stable enough并且它为您提供了大量有用的功能。
在您的情况下,请设置以下路线:
$route['404_override'] = 'pagemaker';
如果路由器不知道去哪里,只需转到页面制作控制器。然后,这可以检查第一个uri段是否存在,如果不存在,则创建自定义404页面而不是蹩脚的默认页面。
而且我不想听到任何这个“哦,但它还没有发布”废话,我已经使用CI 2.0近一年了。 ; - )
答案 1 :(得分:0)
我可以想到两种可能性:
1)编辑自定义函数,让页面不在数据库中时重定向客户端 伪代码:
if($dbresult == null){
redirect("http://yoursite.com/"+$this->uri->segment(3));
}
2)编辑CI的路由器类,以便它首先检查数据库中的页面是否存在,如果没有,则继续。由于您需要在Router.php
中建立数据库连接,这可能会有些麻烦