2010-02-09 9 views
0

我使用的是带有HMVC模块扩展名的Codeigniter,并具有用于管理网站内容的后端CMS区域。我将基本URL +“admin”(http://localhost/cms/admin)路由到具有前缀“admin_”的控制器方法。Codeigniter HMVC和CMS

 
e.g. function admin_index() {...} 

这里是我的路由:

 
$route['admin/([a-zA-Z]+)/(:any)'] = "$1/admin_$2"; 
$route['^admin/(:any)(/)?'] = "$1/admin_index"; 
$route['^admin(/)?'] = "dashboard/admin_index"; 
$route['admin/logout'] = "login/admin_logout"; 

随着HMVC没有正确的路由现在。这里是发生了什么:

 
URL: http://localhost/cms/admin/faqs 
Directory: modules/faqs/controllers/faqs - index method 
-- 
here is where it breaks 
-- 
URL: http://localhost/cms/admin/faqs/categories 
Directory: modules/faqs/controllers/faqs - categories method (does not exits) 
Desired: modules/faqs/controllers/categories - index method 

如何使用HMVC,同时保持“管理员”是网站?

+0

为了不被周围最聪明的孩子,但不会是更容易管理和具有管理路径在一个地方(例如'在admin'控制器和'管理员/ faq'功能它)和其他地方的一切? – 2010-02-09 20:01:26

+0

HMVC的目的是为了允许一个模块化的结构,在那里你可以直接拾取整个文件夹并将它像模块一样放入另一个安装中。你的目的不符合我想要做的。谢谢,虽然:) – Torez 2010-02-09 20:12:02

回答

2

通过将前端和后端功能放在同一个控制器中,使生活变得有些棘手。看看我的文章how to create an admin structure in CodeIgniter

+0

我以前看过这篇文章,但只是略过它。乍一看,第三种选择可能是最好的解决方案。 谢谢。 – Torez 2010-02-10 15:21:55

0

我正在做类似的事情,并且像你一样实施了一个交换(第三选项),它工作正常。

我试图实现一个前端控制器来处理管理部分,并运行模块与HMVC模块:: run()并缓冲输出,如我所愿,但后来我遇到了另一个问题,你将不得不改变来自/ to _或其他的URI方案,因为你无法将模块段作为参数发送到你的控制器,因为CI依赖于“/”作为它的路由机制。

唯一的办法是按照Phil的建议模拟管理部分,但还有另一个选项仍然可以控制任何使用CMS的人执行的代码。

您可以扩展CI_Controller(或MX_Controller,以防您正在使用HMVC)并添加一个Admin_Controller来处理您的逻辑并控制可以执行的模块。

看一看这个CodeIgniter Base Classes: Keeping it DRY