【问题标题】:How can I load a Page using Codeigniter controller?如何使用 Codeigniter 控制器加载页面?
【发布时间】:2012-04-11 14:46:41
【问题描述】:

我使用 CodeIgniter 制作了一种 CMS。它根据 URL 参数中传递的 slug 文本从数据库加载页面内容,例如关于、服务、联系方式。

在控制器代码中,我重新映射了索引方法以将 slug 作为参数传递给它,因为默认索引方法不允许参数。 在下面的链接中检查我的page 控制器的代码:

http://pastebin.com/MwsVzRwQ

它的工作方式是,我已将page 控制器设置为默认加载。所以每次我这样打开我的网站时

http://www.mysite.com

它像这样加载控制器

http://www.mysite.com/page

如果我们将 slug 传递给它,它会从数据库中加载该 slug 的页面内容,就像这样

http://www.mysite.com/page/about http://www.mysite.com/page/portfolio

如果我们不通过 slug,它会加载主页。

现在我想做的是,我不希望这个“页面”文本出现在 URL 中。所以页面应该像这样打开

http://www.mysite.com/about

http://www.mysite.com/portfolio

我想这可以通过 URL 重写来实现。 我已经完成了从 URL 中删除 index.php 的 URL 重写,这通常适用于所有 Codeigniter 网站。下面是我的 .htaccess 文件的代码

RewriteEngine on

RewriteCond $1 !^(index\.php|uploads|fckeditor|assets|robots\.txt)

RewriteRule ^(.*)$ /jobsite/index.php/$1 [L]

现在的问题是,我怎样才能使 URL 像这样工作

http://www.mysite.com/about

http://www.mysite.com/portfolio

提前致谢。

【问题讨论】:

    标签: php codeigniter url url-rewriting


    【解决方案1】:

    只需将其添加到您的 config/routes.php 文件中:

    $route[':any'] = 'your_controller';
    

    然后在 *your_controller* 中,您可以使用以下命令访问 URI 段:

    $this->uri->segment(1);
    

    获得 URI 段后,您可以查询数据库并将数据发送到您的视图。如果 URI 段为空,则加载主页。

    【讨论】:

    • gr8,这行得通。如何为 /admin_panel、/order_manager 等控制器添加异常。
    • @aslamdoctor 来自 CI 文档:“路由将按照定义的顺序运行。较高的路由将始终优先于较低的路由。”如果它有效,想接受它作为正确答案吗? :)
    • 当然可以。但如果你能帮我解决这个 admin_panel 的事情,那将不胜感激:)
    • 只需在我的答案中的 :any 行之前添加类似:$route['admin_panel'] = 'admin_panel_controller'; 的内容。如果您有少量页面应该由同一个控制器处理,您可能希望将 :any 替换为简单的正则表达式:$route['about|contact|services'] = 'your_controller';
    • gr8,它工作但现在像“admin_panel/user_manager”和“admin_panel/pages_manager”这样的admin_panel子页面出现问题:(对不起朋友,但我真的需要解决这个问题
    【解决方案2】:

    好的,所以我要做的是 yRosen 提出的建议,有一点不同,并且按正确的顺序提及:

    首先是您的管理控制器,然后是其他所有内容:

    $route['admin_panel/user_manager/(:any)'] = "admin_panel/user_manager/$1";
    $route['admin_panel/pages_manager/(:any)'] = "admin_panel/pages_manager/$1";
    $route['admin_panel'] = "admin_panel";
    
    $route['(:any)'] = "pages/$1";
    

    在制作复杂网站或过多使用 url 时,我通常会考虑的另一件事是将管理员放在单独的主机上。 您为公共端保留“www.myhost.com”,并为管理部分使用“admin.myhost.com”。当然,它需要 2 次 CI 安装和一些模型复制,但它可以节省时间并提高安全性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-04
      • 1970-01-01
      • 1970-01-01
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-28
      相关资源
      最近更新 更多