2013-10-22 106 views
-2

我在模型中有一個叫做getThumbnail()的函數。在視圖中調用模型函數?

如何在視圖文件中調用此函數。

目前我有什麼用是:

<?php 
$tmp = new Model(); 
echo $tmp->getThumbnail(1); 
?> 

是否有任何其他的方式來做到這一點,因爲調用從直接查看模型不看的權利。

+0

...有一個相當不錯的概念,稱爲_controller_,C中的MVC。看看它,它是概念。 – akluth

+0

我瞭解控制器。問題是,必須將參數傳遞給getThumbnail()函數,並且該參數是在視圖中的循環內部獲取的。 –

+1

「模型功能」究竟是什麼?模型是**不是**類或對象。模型是一個圖層。如果你想訪問它的結構,你應該使用服務:'$ im = $ this-> serviceFactory-> create('ImageProcessing'); $的IM> getThumbnail($ I);'。 'serviceFactory'應該是一個控制器視圖的依賴關係。然後再一次......我感覺你沒有「意見」。只有一堆愚蠢的模板。 –

回答

1

從視圖調用模型不是一個好主意。

視圖是控制器的爪牙。模型只能從控制器傳遞。

2

如何正確地做到這一點是一個相當廣泛的話題,沒有一個正確的答案。但是,我肯定會指出的一件事是,在視圖內實例化模型類是絕對錯誤的。相反,你應該:

  1. 從控制器傳遞的Model一個實例的視圖,或
  2. 從控制器向視圖,其允許視圖調用任何或某些傳一個「調度員」對象間接模型功能,例如:

    echo $dispatcher->dispatch('Model', 'getThumbnail', 1); 
    

    它使一個很大的意義,如果模型方法此調度程序允許被限制,強制執行的關注體面的分離。例如,該視圖不應該發出修改模型狀態的任何調用,如User::createNewUser等。應該只允許視圖調用「被動」模型方法來獲取數據。

主要點是在這裏,你要注入依賴到視圖,而不是硬編碼的具體型號直接調用。這幾乎適用於任何依賴關係,而不僅僅是視圖模型關係。

+0

調度員聽起來不錯。我如何創建一個? –

+0

這可能非常簡單或非常複雜。上面這個可以簡單地作爲'public function dispatch($ class,$ method,$ arg){$ obj = new $ class;返回$ obj - > $ method($ arg); }'但是你可能需要更多的邏輯來實例化你的類,爲此你可能需要一個註冊表或一個依賴注入容器。無論如何,您應該瞭解更多關於依賴注入的知識。這應該會告訴你爲什麼你現在的代碼很糟糕,並且如果你從頭到尾理解和遵循這個理念,它或多或少會自動引導你朝着正確的方向前進。 – deceze

+2

@tereško對不起,我對這個答案感到不滿,並沒有進入關於MVC和DI的整個哲學背景,並且可能給你的標籤的概念與你所做的不同。 – deceze

相關問題