2012-08-11 79 views
2

在CodeIgniter用戶指南中,example model曾在相應的數據庫表中的每個 字段屬性:CodeIgniter示例模型中的屬性是什麼?

class Blogmodel extends CI_Model { 

     var $title = ''; 
     var $content = ''; 
     var $date = ''; 
     //... 

然而,當它返回一組博客文章中,他們只是普通的對象。

function get_last_ten_entries() 
    { 
     $query = $this->db->get('entries', 10); 
     return $query->result(); 
    } 

如果每篇博客文章,只是要成爲一個通用的對象,什麼是 目的在課程開始的屬性?

看起來好像將每篇博文作爲完全成熟的模型 填充其內容一樣。然後,您可以編寫內部獲取 值的方法。但是,用戶指南中的所有示例似乎都顯示每個控制器都有一個每個型號的實例,並使用該對象來獲取包含數據庫值的通用對象。此外, 示例實例化模型($this->load->model('Blog');)的方式顯然 您只需要在控制器中擁有一個模型實例。

如果我的博客文章有其存儲在 數據庫作爲一個整數status價值,但在幾個不同的控制器我想表明 值作爲人類可讀的字符串,你在哪裏我把函數/方法?因爲我在多個控制器中需要它 ,並且它是特定於一個對象的,我假定它應該是 模型對象的一個​​方法。如果每篇博客文章是模型的實例,我 可以寫這樣的:

function get_human_status() 
    { 
     $lookup = array(
      1 => 'Active', 
      2 => 'Hidden', 
      3 => 'Pending'); 
     return $lookup[$this->status]; 
    } 

但是,如果每個博客帖子是一個通用的對象時,它必須是這樣的:

function get_human_status($data) 
    { 
     $lookup = array(
      1 => 'Active', 
      2 => 'Hidden', 
      3 => 'Pending'); 
     return $lookup[$data->status]; 
    } 

CodeIgniter更慣用哪種方式?假設它是第二個,爲什麼示例模型定義了這些內部屬性?

最後,對於獎勵積分,如果我還有其他關於這種性質的問題,我應該看什麼書, 文章或例子?

回答

4

呃..名稱爲「CodeIgniter」的災難。

在那個糟糕的框架的文檔中,他們將「model」描述爲實現活動記錄模式的實例。這就是爲什麼你在該類的定義中獲得無意義的屬性的原因。這只是AR模式下兩個職責(存儲和邏輯)之間衝突的另一個副作用。另外,您可能會注意到關鍵字var,這是PHP4的一個工件。

你稱之爲「模型」不是。它們是簡單的domain objects,而後者又是模型的一部分。模型層是一個心理構造,就像MVC設計模式中的其他層 - 表示層一樣。

$this->load->model()方法未初始化「模型」實例。這是CodeIgniters缺乏適當自動加載器的另一個例子。此方法僅用於包含文件,其中包含Blog類。因此,你不能斷定「博客」我應該是一個單一的對象。

控制器不應該「顯示」任何東西。在那裏可以改變當前視圖實例和模型圖層的狀態。視圖應該處理表示邏輯,選擇如何顯示某些內容以及使用哪些模板。視圖不應該是愚蠢的模板。

至於教育材料,你會發現在this post結束時丟失的講座和書籍。您也可能與thisthis有些相關。