2010-07-31 103 views

回答

3

簡短的答案是 - 沒有。您需要從Controller中獲取數據,並將其傳遞到幫助程序獲取它的視圖。

當我開始使用MVC模式時,我在開始時有同樣的異端想法。 :)

+0

確切地說,助手在視圖層,所以不應該獲取數據,只顯示它。您應該從控制器層的模型(即控制器動作/過濾器)中獲取數據並將其設置爲視圖層(即使用'$ this-> set()')。這將使數據可用於視圖,佈局,元素和/或助手。 – deizel 2010-07-31 21:14:37

+0

因此,不應該通過視圖訪問會話信息,它應該通過$ this-> set()發送到視圖? – Anthony 2010-08-01 00:19:45

+0

是的,但如果信息是一般的,就像一些設置,你可以在AppController-> beforeFilter()中設置它,所以每個視圖都會有它。 – 2010-08-01 16:23:00

0

沒有正確的方法來查找幫助器中的數據庫信息,你應該避免它。

但有一種方法可以在助手和視圖中執行: $ posts = ClassRegistry :: init('Post') - > find('all');

同樣,建議您不要在視圖中使用模型,稍後您會感謝您自己。

0

我不同意這個概念,我可能不會使用數據庫結果的幫手。因爲 假設我試圖顯示側欄或頁腳中的動態鏈接,我必須將結果放在每個控制器中的每個方法中。 所以很容易在助手中調用該函數來創建一個元素並在其中調用該助手。

現在你可以調用數據庫的結果助手就這樣

ClassRegistry ::初始化( '郵報') - >查找( '所有');由法赫德撰寫。

如果你已經在post模型中做了一些方法,你可以這樣調用 ClassRegistry :: init('Post') - > custom_function_name($ params);

0

如果你想在每個頁面上都有動態鏈接,那麼編寫一個從db中獲取鏈接的組件,然後在控制器中設置該變量,以便視圖知道它。 你有沒有AppController使用組件,如果你寫得正確,你將永遠不必將其包含在任何操作中。

http://github.com/markstory/cakephp_menu_component

或者......

編寫使用requestAction和緩存菜單的元素。當你需要時,將這個元素包含在你的視圖中。

http://bakery.cakephp.org/articles/view/creating-reusable-elements-with-requestaction

或者......

運行在你的AppController中的代碼:: beforeFilter方法和分配視圖變量的方式。

http://book.cakephp.org/view/984/Callbacks

所有這些方法都是MVC 正確而在實例化您的視圖模型是不正確並沒有任何餘地爭論它。正確的做法是,在學習CakePHP如何保持代碼的同時,讓自己保持頭痛。DRY

相關問題