【问题标题】:CodeIgniter - Stuck with routesCodeIgniter - 卡在路线上
【发布时间】:2013-09-19 12:06:54
【问题描述】:

我正在试用 CodeIgniter 2.1.4。我已经有一个控制器用于显示我使用 CodeIgnitor 文档中的教程构建的静态页面。我后来设置了这样的路线:

// <http://localhost/> refers to <http://localhost/pages/view/>
   $route['default_controller'] = "pages/view";
// <http://localhost/somepage/> refers to <http://localhost/pages/view/somepage/>
   $route['(:any)'] = "pages/view/$1";
// .htaccess is already setup to rewrite the url without index.php

现在,我对 PHP 没有太多经验,URL 重写MVC 架构 的概念对我来说相当新。

假设有页面称为 •Home、 •About、 •Admin 和 •Contact。

对于页面•Home、•About 和•Contact,Pages 控制器可以正常工作。

但是对于 •Admin 页面,我想要一个单独的控制器来确定用户是否已登录,以及他是否具有管理员权限等。如果他还没有登录,我应该加载 Login 视图,而不是 Admin 视图。

Pages 控制器的逻辑相当简单。它检查参数中的字符串,附加 .php 并附加视图目录,是否作为文件存在。如果不是show_404(),如果是,加载视图header-template,然后加载页面,然后加载视图footer-template。我敢肯定,大多数使用过 CodeIgniter 的人一定见过类似的静态页面逻辑。

我可以在我的 Admin 视图中执行 redirect('login'),但这似乎不起作用。如果我为 Admin 创建一个单独的控制器,我将如何访问它,而根据路由,每个 URL 都会被定向到 pages/view 控制器(上面代码中的第 4 行)。

正如我已经说过的,我对此很陌生。这可能是我正在犯的一些迟钝的错误。或者我的整个 MVC 结构可能构建不当。我该如何克服这个问题并开始担心身份验证问题?谁能给点建议?

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:
    $route['default_controller'] = "pages/view";
    $route['admin/(:any)'] = "admin/$1"; //(admin controller) with "any" method 
    $route['(:any)'] = "pages/view/$1";
    

    localhost/poject/admin/edit 为例

    您遇到的问题很简单,您用 (:any) 覆盖所有控制器,这并没有错,但您需要手动分配您希望路由为正常控制器的每个控制器,就像我在上面发布的那样。

    请注意,路线取决于顺序,如果使用一个(第一个),则忽略第二个。 “路线将按照它们定义的顺序运行。较高的路线将始终优先于较低的路线。”

    有关身份验证,请参阅此post

    我宁愿使用_remap()extend CI_Controller 来接管我的路线,而不是在routes.php 中有这条路线$route['(:any)'] = "pages/view/$1";

    remapping

    【讨论】:

    • 我正要回答我自己的问题。我认为最好的方法是你提到的。我现在每页都有一个$route 分配;)。如果是aboutcontacthome,路由是pages/view/$1,如果是admin,路由是admin/index/$1。但这可能不是最有效的方法。我将按照您提到的 first-route-first_remap() 策略处理一些不同的逻辑。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-13
    • 2014-09-10
    • 2023-03-30
    • 2017-03-01
    • 1970-01-01
    • 2020-06-06
    相关资源
    最近更新 更多