2011-06-26 66 views
1

有點上下文:我需要緩存我的CakePHP站點的主頁 - 除了一小部分,它根據用戶的IP地址向用戶顯示本地事件。有沒有從CakePHP助手調用模型的不利之處?

顯然你可以使用<蛋糕:nocache >標籤來規定不應該被緩存的頁面的一部分;但是你不能用這些標籤包圍一個控制器集變量以使其變爲動態的。據我所知,一旦頁面被緩存,這就是控制器操作。

什麼你可以有用地圍繞着nocache標籤是元素和助手。因此,我在這些標籤中創建了一個元素,它調用一個輔助函數來訪問模型並獲取適當的數據。爲了得到從我使用的輔助模型:

$this->Modelname =& ClassRegistry::init("Modelname"); 

這在我看來,不過是一種做事的方式前途未卜,無論是在CakePHP的方面和一般的MVC原則。所以我的問題是,這是獲得我想要做的事的適當方式,還是應該敲響警鐘?有沒有更好的方法來達到我只想在這裏失蹤的目標?

回答

0

除了打破MVC所有精心設計的原則嗎?

除了把這個項目放到一個元素中,爲什麼不用一個簡單的ajax來獲取呢?

  1. 將在其自己的控制器行動的號召,使得目標URL - > /控制器/動作(!很方便)
  2. 傳遞IP回在行動中使用了找到叫
  3. 將ajax更新回調設置爲具有相應調用結果的元素內的目標

不需要直接從視圖中調用模型,也不需要使用requestAction將事情弄糟。 :)

HTH

+0

聽起來不錯。你會認爲ajax獲取本質上比使用requestAction更好嗎?我很容易看到,我有各種各樣的選擇,比我原先的草率計劃更好,很難說出爲什麼一個比另一個好得多...... – thesunneversets

+2

大概90%的視景舞臺對象需要獨立的所有情況數據,是啊,ajax> requestAction。 MVC就像劃獨木舟一樣,沿着河流流淌着各種美食。 requestAction - >你轉過身來,把蛋糕放回河邊。 Ajax - >你打電話給你的朋友,將數據放在內管上。 (在一個更涼爽的地方;))它可能有點潮溼,但它跳動了河水。 Ergo - > PHP的requestAction()必須向後移動以獲取$ this是一個View的位置;觸發你的控制器動作的ajax =傳送到開始,並帶有新的$ this。 – OpenSorceress

+0

謝謝,你的獨木舟比喻讓我相信,我會給它一個旋轉;) – thesunneversets

1

而不是使用助手,嘗試將您的代碼放入元素中,並使用元素內部的requestAction。

看到此鏈接

http://bakery.cakephp.org/articles/gwoo/2007/04/12/creating-reusable-elements-with-requestaction

這將是比試圖在你的助手使用模型的更好的方法。

+0

啊哈!這似乎比通過扭曲來訪問Helper中的模型好得多。還有一個問題:有關requestAction的Cookbook部分說:「如果在沒有緩存的情況下使用requestAction可能會導致性能下降...... requestAction最好與(緩存的)元素結合使用」。顯然當我使用requestAction時,我感到有點緊張,因爲我不希望被緩存!你會說這是正確的軌道嗎?謝謝! – thesunneversets

+0

過去已經有相當多的討論,結果似乎是使用requestAction通常可以接受的開銷。如果這可能是您的服務器上的一個限制,我個人希望檢查腳本內存使用情況。順便說一下,如果您擔心助手和模型之間的依賴關係不查看FormHelper的代碼,那麼您可能會做惡夢。 – contrebis