我正在开发一个网站codeigniter分为模块使用HMVC。我希望管理员启用/禁用模块,以下是我计划实现它的方式。由于我在PHP/Codeigniter方面没有太多经验,因此以下方法可能会非常错误,所以我正在寻找建议/反馈:Codeigniter模块配置和ACL
数据库表:模块 ID | NAME |状态
上表将包含所有模块信息,并且状态字段将包含禁用/启用值(0或1)。
我要延长主要是CI_Controller,并有一个函数来检查模块的状态:
class MY_Controller extends CI_Controller{
public function __construct()
{
parent::__construct();
$this->load->Model('Module_model'); //loads the module model
}
function check_module_state($module_name = '')
{
return $this->Module_model->getState($module_name); //the model returns TRUE or FALSE
}
现在,每个控制器的构造函数中,我将扩展MY_Controller类和呼叫check_module_state
,如果它返回FALSE,则会将用户重定向到“Section Disabled Page”;
class Module1 extends MY_Controller{
public function __construct()
{
parent::__construct();
if($this->check_module_state('module1') == FALSE)
redirect('module_disabled', 'location');
}
}
请问上述工作是否有更好更容易的选择? 谢谢
是的,没有显示禁用模块的链接是一个好主意。说到这些,如何有效地管理菜单?我打电话在视图文件中做这件事吗?如果($ this-> Modules_model-> isActive('module1')echo'module1';' '这样,我认为它会调用所有模块的数据库显示在菜单上。我调用数据库一次,并将模块名称和它的状态存储在一个数组中,然后检查数组的状态? – WebNovice 2011-06-10 07:56:25
@Damchey这是一个可能的解决方案是。我不使用CI,但如果它的任何类似ZF并支持现场广泛的默认布局,那么你可以坚持你的导航的东西都在那里。 – martynthewolf 2011-06-10 08:01:20