我正在尝试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。
对于页面•主页,•关于和•联系人, 页面 控制器正常工作。
但对于•管理页面,我想要一个单独的控制器来确定用户是否已登录,以及他是否具有管理员权限等。如果他还没有登录,我应该加载< strong> 登录 查看,而不是 管理 视图。
Pages 控制器具有相当简单的逻辑。它检查参数中的字符串(附加.php
并且前面带有views目录)是否作为文件存在。如果不是show_404()
,如果不是,请加载视图 header-template ,然后加载页面,然后加载视图 footer-templat 。我很确定大多数使用CodeIgniter的人都必须看到类似静态页面的逻辑。
我可以在 管理 视图中执行redirect('login')
,但这似乎不起作用。如果我为Admin创建一个单独的控制器,我将如何访问它,而根据路由,每个URL都被定向到pages/view
控制器(上面代码中的第4行)。
正如我已经说过的,我对此很新。这可能是我正在做的一些迟钝的错误。或者我的整个MVC结构可能不合适。我如何通过这个并开始担心身份验证的问题?有人可以建议吗?
答案 0 :(得分: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)
覆盖所有控制器没有错,但您需要手动将每个想要路由的控制器分配为我上面发布的普通控制器。
请注意路线是依赖于订单的,如果使用了一个(第一个),则忽略第二个路线。 “路线将按照定义的顺序运行。较高的路线始终优先于较低的路线。”
要进行身份验证,请参阅此post。
我宁愿使用_remap()
和extend CI_Controller来接管我的路线,而不是在routes.php中使用此路线$route['(:any)'] = "pages/view/$1";
。