【问题标题】:How to deal with routing when developing a custom CMS in Codeigniter在 Codeigniter 中开发自定义 CMS 时如何处理路由
【发布时间】:2011-01-14 12:53:47
【问题描述】:

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

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

我希望系统检测我的数据库中是否有“pagename”的值,如果有,我需要系统重新路由到自定义控制器(例如:Pagemaker),如果没有记录叫pagename,做正常的事(即找到一个叫pagename的控制器)

目前我有:

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

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

但是我想改变这个结构,如果页面不存在于 db 中,则遵循传统的 codeigniter 请求过程。

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

【问题讨论】:

    标签: php url codeigniter routes codeigniter-url


    【解决方案1】:

    最好的解决方案是upgrade to CI 2.0,因为it's stable enough 它为您提供了很多有用的功能。

    在您的情况下,设置以下路线:

    $route['404_override'] = 'pagemaker';
    

    如果路由器不知道去哪里,它只会转到 pagemaker 控制器。然后,这可以检查第一个 uri 段是否存在,如果不存在,则创建自定义 404 页面而不是糟糕的默认页面。

    而且我不想听到任何这种“哦,但它还没有发布”的废话,我已经使用 CI 2.0 将近一年了。 ;-)

    【讨论】:

    • 好的,我要升级了……我很害怕。抱我菲尔 ;-)
    • 没关系,但请您自己动手。
    • 只是一个简单的问题:为什么 ci 2.0 附带的用户指南中没有提到这条路线?
    • 如果将来有人遇到这种情况,讨论的路由:$route['404_override'] 必须同时包含控制器和方法,即在我的示例中:$route['404_override'] = ' pagemaker/create' 否则将无法正常工作
    • 这已在 CodeIgniter Reactor 中修复,很可能很快会在 Core 中修复。
    【解决方案2】:

    我能想到两种可能:

    1) 编辑您的自定义函数,让它在页面不在数据库中时重定向您的客户端 伪代码:

    if($dbresult == null){
        redirect("http://yoursite.com/"+$this->uri->segment(3));
    }
    

    2) 编辑 CI 的路由器类,使其首先检查页面是否在数据库中,如果没有,则继续。这可能有点混乱,因为您需要在 Router.php 中建立数据库连接

    【讨论】:

    • 这个问题是你的系统一直在循环 - 每次都重定向回同一个 pagemaker 类并且不会工作。
    猜你喜欢
    • 2017-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多