2013-01-15 100 views
1

我在CodeIgniter上組織視圖時遇到問題。使用codeIgniter組織web應用程序

項目:創建一個簡單的Web應用程序,允許管理一個庫(書櫃)。

我創建了3種型號:會員分類書籍各自的控制器。

我使用控制器實現了成員模型。

在member_controller我們:

public function login(){ 

$this->load->helper('form'); 
$this->load->helper('email'); 
$this->load->library('form_validation'); 

$mail = $this->input->post('mail'); 
$pass = $this->input->post('pass'); 

$data['mail'] = $mail; 
$data['pass'] = $pass; 


$this->form_validation->set_rules('mail', 'mail', 'required'); 
$this->form_validation->set_rules('pass', 'pass', 'required'); 

if ($this->form_validation->run() === TRUE) 
{ 

$result=$this->membre_model->login($mail,$pass); 

if($result==TRUE){ 

$this->load->view('templates/header.php'); 
$this->load->view('membre/logged',$data); 
$this->load->view('templates/footer.php'); 


} 

一旦用戶登錄,我想告訴他之前創建的所有現有的類別(所以從數據庫中獲取它們)。

  • 我該怎麼做?
  • 是否需要在成員控制器的登錄功能中調用類別控制器的功能?
  • 我是否必須從Login函數加載類別視圖?
  • 我是否只需從一個控制器(成員控制器)構建站點?
  • 如何用不同控制器的不同視圖構建webapp?

最後,我不明白的是不同的控制器之間如何溝通。

回答

0

我該怎麼做?

您將不得不添加一個異常時加載每個頁面,將重定向用戶根據他們的登錄狀態。換句話說,如果用戶已登錄,請將其帶到應用程序。如果用戶不存在,請將其重定向到註冊頁面。

這可以通過驗證用戶是否基於存儲的會話值進行登錄來完成。如果存儲此會話,則可以讓用戶查看該頁面。下面是一個很好的教程,介紹一個簡單的Codeigniter登錄系統。

http://www.codefactorycr.com/login-with-codeigniter-php.html

在我看來,我通常使用的身份驗證庫來簡化登錄系統,我的應用程序。我會使用Ion Auth,它有一個很好的文檔解釋你可以使用的所有功能。

我是否需要在成員控制器的登錄功能中調用類別控制器的功能?

您可以像通常一樣簡單地使用類別控制器。您可以根據存儲在瀏覽器中的會話信息更改頁面信息或重定向用戶。

我是否必須從Login函數加載類別視圖?

您將從類別控制器中加載類別視圖。執行登錄後,登錄控制器會將用戶重定向到類別控制器。

我是否必須從一個控制器(成員控制器)構建站點?

不,您可以擁有儘可能多的控制器。

如何使用不同控件的不同視圖構建webapp?

控制器將代表您網站的一部分。這個控制器會爲不同的事情加載多個視圖。這是一個great little tutorial解釋MVC worklow。這將幫助您瞭解過程。

+0

取決於應用程序需要的安全程度....使用cookie存儲登錄數據可能是一個壞主意,因爲它們可以由用戶編輯。 Ion auth是一個出色的圖書館,它將使保護您的應用程序變得更容易。 – WebweaverD

+0

非常真實,但我只是使用術語cookie來幫助解釋存儲在瀏覽器中的數據的概念。 – Karl

+0

感謝您的回覆。其實這些答案幫助我澄清我的想法。正如你所說,控制器代表我的網站的一部分在我的情況下,我有3個部分(成員系統,類別,書),所以3個控制器。這些控制器在處理後將數據傳遞給不同的視圖。現在,我的問題是:如何只有一個控制器可以加載所有不同部分(由其他控制器製作)和控制器以前的視圖(登錄 - >記錄)的整個頁面? – Quentin91360

0

您可以從另一個使用URI調用一個控制器,因此,例如,你可能有這樣的條目你的路由文件:

$route['books/get_books_by_user/(:any)'] = "books/get_books_by_user/$1"; 

然後你可以撥打形成你的登錄控制器:

redirect('books/get_books_by_user/'.$user_id) 

然後,您將在書籍控制器中的get_books_by_user方法中處理此操作。例如使用:

$user_id = $this->uri->segment(3); 
$collection = $this->books_model->get_books_by_user($user_id); 

你的問題是,如果你不希望用戶以外的任何人都可以看到自己的書單,你必須檢查用戶從你的書控制器登錄。 這就是爲什麼大多數用戶身份驗證腳本都以可從任何控制器訪問的庫呈現。如果你的auth沒有像這樣佈置,你可以將用戶的詳細信息存儲爲會話數據並從那裏檢查,這將意味着你不必通過uri傳遞用戶名。詳情請參閱會話文檔:http://ellislab.com/codeigniter/user-guide/libraries/sessions.html