2012-06-20 114 views
0

這是我在codeigniter MVC中的問題。codeigniter mvc,模型分離

假設我有3個模型:(用戶,電子郵件,付款)。 當某人以某種方式付款時,控制器會調用某種付款方式,該方法也可以從其他控制器中調用。

這個方法,做一些數據庫插入和更新,最後它想發一封郵件給用戶,它已經有了userid,但是它需要用戶名,email,它應該從用戶表中獲得,然後發送郵件。

我不喜歡支付模式可以訪問用戶表,我想從用戶模型獲取信息並使用電子郵件模型發送電子郵件。

通常我打電話給那些控制器,我的意思是第一次通話付款模式,並得到結果,並從用戶模型獲取用戶信息,然後使用電子郵件模型,全部在控制器中。

但是因爲我需要在某些控制器中運行該模型的方法,所以我必須重複這些方法,這不是我認爲正確的方面。我應該在模型內部調用其他模型還是在模型中使用其他模型表(在這個選項中,如果我想重新使用這個模型,我應該改變它,如果其他表更改,這是不正確的),或者是否存在任何其他方式?

主要問題不完全在於它僅僅是情況的例子。 我還定義了一些功能,它可以完成那些控制器的功能,但它也不對。

+0

如果所有方法是在同一個模式,我沒有問題。但它也不對。 – masphp

+0

我使用CI 3個月,我遇到了一些限制,所以你認爲如果我使用zend框架,它會有所幫助,在這種情況下和其他限制,即:定義多層控制器 – masphp

回答

1

把它放到一個庫中。

因此,您的控制器調用圖書館的「付款」,並傳遞一些細節。然後,您的圖書館做所有的你在上面描述的特徵 - 即調用支付模式,發送電子郵件等等等等

You can learn more about codeigniter libraries here

+0

謝謝,它是一個選項,可以你告訴我在這種情況下函數和庫之間有什麼不同,如果我可以在這個方法中使用函數,畢竟我想把所有的邏輯放在這種情況下的類中。 – masphp

1

這裏是一個很好的解決方案。在application/core中定義My_model.php。

Class My_model extends CI_Model{ 

    function __construct() 
    { 
     parent::__construct(); 
    } 

    function get($where , $table){ 
     $query = $this->db->get_where($table, $where); 
     return $query->result(); 
    } 
} 

現在你的模型應該擴展My_model而不是CI_Model。 現在你可以這樣稱呼它。假設您的控制器中已經加載了電子郵件模型,並且您想要訪問用戶模型。

$where = array('user_id', $id); 
$table = 'user'; 
$this->email->get($table, $where); 

欲瞭解更多信息,請閱讀這本書
http://codeigniter.com/forums/viewthread/211821/

+0

這是一些解決方案,但它不是我正在尋找的確切點。 – masphp