簡體   English   中英

我應該如何在CodeIgniter中構建應用程序?

[英]How should I structure my application in CodeIgniter?

我正在設計一個帶有代碼點火器框架的PHP應用程序,並以MVC的形式對其進行了結構化,但是在如何創建事物的意義上,我感到困惑。 我當前的問題是,在用戶登錄會話后,存儲並在控制器中對其進行訪問后,該模型對當前會話一無所知,因此我發現每次使用該模型時,都必須將userID傳遞給它( IE更新或獲取用戶信息)似乎每次都必須繼續執行此操作效率很低。 我想知道是否有更好的方法,或者我在組織代碼的方式方面犯了錯誤。

您也可以使用助手,這對您有很大幫助。

像MVC一樣,我們可以使用可以在任何地方使用的輔助函數。 您也可以創建自己的助手。

使用以下功能,加載幫助文件非常簡單:

$this->load->helper('name');

其中,name是幫助程序的文件名,不帶.php文件擴展名或“ helper”部分。

例如,要加載名為url_helper.php的URL Helper文件,您可以這樣做:

$this->load->helper('url');

欲了解更多信息,請點擊此鏈接Codeigniter

示例:您有一個帶有一堆用戶方法的控制器。 您已經在單獨的控制器中登錄了用戶,並且正在使用Cookie和數據庫會話

在控制器中創建一個構造函數

public function __construct() {

        parent::__construct();

        $this->load->model( 'users' );

        // return the $user object 
        if ( ! $this->user = $this->users->returnUserFromCookie() ) {
            redirect( '/login/', 'refresh' );       }

        // assign the id 
        else {  $this->userID = $this->user->id ; }


    } // 

如果用戶對象不是從用戶模型返回的,那么我們將重定向到登錄名。

否則$ this-> userID現在可用於控制器中的任何方法,模型中調用的任何方法以及所調用的任何視圖。

    function showHistory(){

     $history = $this->users->returnHistory($this->userID) ; 

  } 

在這種情況下,由於我們還有$ this-> user對象,因此可以通過任何方法從中提取其他數據。

function sayHello(){

$data['greeting'] = 'Hello ' . $this->user->first . ' ' . $this->user->last ; 

} 

我們不必將$ user或$ this-> user傳遞到sayHello()中,因為它已經可用。 並且我們不必測試是否設置了$ this-> user,因為該檢查是在構造函數中完成的。 如果未設置$ this-> user,則永遠不會使用控制器。

您可以將$ this-> user分配給$ data。 使它在您的視圖中更干凈。

在控制器方法中分配給數據並傳遞$ data來查看

$data['user'] = $this->user ;
$this->load->view( 'history', $data ); 

現在您認為您不需要$ this->,因為我們有一個$ user對象。

<?php echo 'Hello ' . $user->first . ' ' . $user->last ; ?> 

=========編輯

感謝您的答復,您如何在模型中訪問$ user?

與控制器示例完全相同。 $ this-> user-> id等

就像模型如何知道在調用它時要對哪個用戶執行數據庫操作。

它將會是您在構造函數中調用(或返回)的用戶。 因此,如果您在$ id-> user處調用$ this-> user,那么這些將對模型可用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM