我正在開發一個網站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