2013-07-03 40 views
1

我目前有一個幫助器(FieldFormatterHelper),我創建這個幫助器的目的是爲了在各種視圖中協調一致的格式化某些類型的數據(日期,布爾值,枚舉類型等)。把CakePHP項目中的通用功能放在哪裏

特別是我使用整數在MySQL中存儲某些枚舉類型,然後在我的視圖中顯示相應的字符串值。我現在遇到的問題是,雖然這個Helper適用於我的視圖,例如管理用戶從站點後端訪問的「視圖」和「索引」視圖,但在幾個創建JSON輸出的模型中也有afterSave()方法在前端呈現鬍鬚。

我或多或少地理解了MVC的核心思想,以及不試圖從模型中訪問View Helper的基本論點,但我需要某種對我的Helper提供的功能的普遍訪問。當然,我可以在我的前端JavaScript和其他我可能需要的地方定義枚舉類型映射,但是這違反了DRY原則,並最終成爲一個難以維護的問題。

所以,問題是:如果不適合從我的模型中訪問/加載我的助手,我應該在哪裏以及如何封裝這個功能,以便我的模型和各種視圖都可以使用它?

理想情況下,我將能夠繼續使用我現有的FieldFormatterHelper - 也許修改爲這個新容器的包裝。

任何關於CakePHP和MVC方式的指導都值得讚賞。謝謝。

+1

非常相似http://stackoverflow.com/questions/17448380 /想要創建自定義函數/ 17448960#17448960 – mark

回答

2

您可以實現它作爲一個類的靜態方法和任何地方使用它

class Utils { 
    static public function formatField($args) { 
      // your implementation 
    } 
} 

然後只是有你的幫手推遲到使用

Utils::formatField($args); 
+0

使用此解決方案的最佳方式是什麼?使我能夠在許多視圖中保留對當前幫助程序的豐富實例引用? – theraccoonbear

+0

將代碼從助手移到靜態函數中,並替換爲對靜態函數的調用。幫助程序實例和調用將保持不變,您可以在應用程序的所有部分使用該功能。 – Orangepill

+0

嘿,這是有道理的。我會給它一個旋轉,假設它有效(我懷疑它會起作用),我會接受這個答案。 – theraccoonbear

0

您可以創建一個靜態的靜態方法調用函數並將其放在app \ view \ helper \ AppHelper.php中。然後,當你想將它命名你把

App::uses('AppHelper','View/Helper');

在文件的頂部,這樣稱呼它:

AppHelper::staticFunction()

相關問題