在Codeigniter中开发自定义CMS时如何处理路由

时间:2011-01-14 12:53:47

标签: php url codeigniter routes codeigniter-url

我是Codeigniter的最近用户,正在开发一个简单的后端CMS来管理页面。

基于URL(在本例中我隐藏了“index.php”):mysite.com/pagename

我希望系统检测我的数据库中是否存在“pagename”的值,如果有,我需要系统重新路由到自定义控制器(例如:Pagemaker)并且如果没有记录调用pagename,只是这样做是正常的(即找到一个名为pagename的控制器)

目前我有:

$route['(:any)'] = "pagemaker/create/$1"; 

将所有请求转发到我的自定义函数。

但是我想更改此结构,以便如果数据库中不存在该页面,则遵循传统的codeigniter请求过程。

有人可以提供有关如何完成此操作的任何建议吗?或者有关在codeigniter中路由自定义CMS的任何建议吗?

2 个答案:

答案 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

中建立数据库连接,这可能会有些麻烦