0

我正在试用 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 页面,我想要一个单独的控制器来确定用户是否已登录,以及他是否具有管理员权限等。如果他还没有登录,我应该加载登录视图而不是管理员视图。

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

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

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

4

1 回答 1

2
$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)这并没有错,但是您需要手动分配您希望路由的每个控制器作为我上面发布的普通控制器。

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

有关身份验证,请参阅此帖子

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

重新映射

于 2013-09-19T13:10:45.920 回答