2011-08-30 62 views
2

我有一個網站,有很多網頁的鹼根(例如/contact,​​,/home, /faq,/privacy,/tos等)。我的問題是這些應該全部是單獨的控制器還是具有多種方法的控制器(例如,main.php控制器內的contact,about,index)?Codeigniter多控制器與許多方法?

更新: 我才意識到是默認的控制器內的方法不無默認控制器的URL顯示(即main/contact不會自動路由/contact如果主要是默認的控制器)。所以你需要進入路線並覆蓋每個page

回答

4

是壞的,如果所有的這些都只是網頁,我建議把它們放入一個單獨的控制器。我通常最終會將這樣的靜態頁面放入「頁面」控制器中,併爲每個靜態頁面放置路由以繞過我的URL中的「/頁面」。

+0

我會喜歡一種方法來自動執行路由。 :( – ThomasReggi

+0

我發現自動獲取路由的唯一方法是使用類似'$ route ['(:any)'] ='pages/$ 1'的路由;'但是我必須聲明所有路由我的控制器...我從來沒有真正做到這一點,除非我有更多的靜態頁面比控制器。 –

+0

@ThomasReggi ...爲什麼?這將需要5分鐘爲這些網頁寫你的路線,然後你就完成了... – jondavidjohn

2

如果他們共享相同的功能,那麼他們應該在同一個控制器中。例如,如果所有人都使用相同的模型從內容中提取內容,則一個控制器可以輕鬆處理它。
爲什麼在一個控制器?因爲你總是想重用你的代碼。

class someController{ 
    function cotact(){ 
     print $this->getContentFromModel(1); 

    } 

    function about(){ 
     print $this->getContentFromModel(2); 
    } 

    function home(){ 
     print $this->getContentFromModel(3); 
    } 

    private function getContentFromModel($id){ 
     return $this->someContentModel->getContentById($id); 
    } 
} 

(而不是print,你應該使用加載view)在我的例子

看到所有的功能都使用相同的getContentFromModel功能共享相同的功能。

但是這僅僅是一個情況下,有可能是療法的情況下,我的例子能爲...

1

您列出的頁面名稱可能應該是主控制器內部的不同方法。當您具有與另一個特定實體(如用戶)相關的其他功能時,您可以爲用戶實體創建另一個控制器,並使用不同的方法顯示用戶,更新用戶,註冊用戶。但它的確是一種工具,可以讓您以一種對您的域和域模型有意義的方式來組織您的應用程序。

2
應用

/配置/ routes.php文件

$route['contact'] = "mainController/contact"; 
$route['about'] = "mainController/about"; 
$route['home'] = "mainController/home"; 
$route['faq'] = "mainController/faq"; 
$route['privacy'] = "mainController/privacy"; 

,你應該添加所有的這些方法的mainController.php內

您也可以保存在數據庫中的網頁的內容,並他們查詢它。例如,您可以發送URL作爲關鍵字來識別頁面內容

$route['contact'] = "mainController/getContent/contact"; 
    $route['about'] = "mainController/getContent/about"; 
    $route['home'] = "mainController/getContent/home"; 
    $route['faq'] = "mainController/getContent/faq"; 
    $route['privacy'] = "mainController/getContent/privacy"; 

在這種情況下,你只需要創建控制器「mainController」命名「的getContent」一分法,這種方法看起來像這樣的:

class mainController extends CI_Controller 
{ 
public function getContent($param) 
{ 
    $query = $this->db->get_where('mytable', array('pageName' => $param)); 
// then get the result and print it in a view 
    }  
    } 

希望這對你的作品