2011-11-08 39 views
0

我正在使用CodeIgniter構建一個站點,直到現在事情進展良好。但是,最近我的一個控制器的規模一直在增長。我想將控制器分成一個子文件夾內的單獨文件。現在,我有以下....CodeIgniter - 組織控制器到子文件夾

/controller/dashboard.php

在該控制器我有不同部分的功能。我檢查運行檢查,看看用戶組是否具有對部分的權限等。所以,網址可能是這樣的......

/儀表板/頁/加

我知道我可以設置一個子文件夾,並有我的網址類似以下....

/dashboard/staff/pages/add

但是,如果可能的話,我想省略'usergroup'。我想通過以下方式執行此操作....

/controllers/dashboard/- >如果員工加載staff.php,如果用戶加載user.php等等。

我不能執行以下任一....

$這 - >負載>控制器();

你會建議我如何設置儀表板區域?每個用戶組都有他們需要訪問的不同內容。把所有內容放在一個文檔中時間太長,將它們分開意味着我必須將用戶組放在URL中。

是否可以在routes.php中執行檢查?

if ($this->user_model->is_user()) { 
    // load this controller 
} 

希望你們對我有一些想法!

感謝, 雅各

回答

1

嘛,一個快速和骯髒的解決方案使用一個主控制器重定向會... ...

創建內部控制器/一個 「儀表板」 控制器:

class Dashboard extends CI_Controller { 

function index() 
{ 
    //make a check for the user that returns the usergroup: 
    $user = $this->user_model->is_user(); 
    redirect('controller/'.$user.'/'.$user); 
} 

} 

基本上只要管理員去http://www.mysite.com/index.php/dashboard它只是重定向到文件夾控制器內的相應用戶控制器。所以如果你的支票返回「職員」,它將重定向到controller/staff/staff.php依次類推。

據我所知,你不能在路由器配置裏面使用自定義表達式。

另一種可能的解決方案是使用hooks。您可以使用一個pre_controller掛鉤

pre_controller你的任何控制器 被稱爲前立即調用。所有基類,路由和安全檢查已完成 。

喜歡的東西

$hook['pre_controller'][] = array(
           'class' => 'Select', 
           'function' => 'get_usergroup', 
           'filename' => 'Select.php', 
           'filepath' => 'hooks'); 

,則在創建應用程序中的Select.php類文件/鉤與方法get_usergroup文件夾(),它從會話或從模型的用戶組抓住並做需要重定向。

相關問題