我正在開發一個處理貨幣值的CakePHP應用程序。客戶希望數字具有像1.275,34
這樣的自定義格式,即整數部分的分隔符爲點,而小數部分的分隔符爲逗號。驗證和轉換CakePHP中的十進制值
我想知道什麼是管理這個最好的方法,因爲我需要做兩個基本點:
- 根據該自定義格式,寫入形式驗證值。
- 根據MySQL列數據類型(在這種情況下爲
decimal(18,2)
,在上例中爲1275.34
)預期的格式轉換這些值。
我想我有這些選擇,但我不完全滿意,因爲任何的幾種模式與自定義格式工作,這意味着複製一些代碼:
- 驗證並在控制器變換值在致電
$this->Model->save()
之前,可能使用組件。 - 使用模型(
var $validate
數組)中的自定義規則驗證數據並轉換它們,也許使用行爲。
你有什麼建議?有沒有其他方法來處理這個問題?
謝謝!
我喜歡這種方法,因爲它避免了我自己編寫轉換代碼。但同樣的問題出現了:如何在驗證時使用貨幣區域設置?哪裏?我想通知用戶,只要它以一種形式寫入錯誤的值 – elitalon 2011-03-11 15:28:59
在這種情況下,我會在'beforeValidate'回調中而不是'beforeSave'中處理輸入數據。我已經更新了我的答案。 – 2011-03-11 15:39:38
如果我想根據數據庫的數據類型驗證數據,那就沒問題了。但我想根據自定義格式進行驗證。我最終使用'beforeSave'方法來處理自定義數據,並使用'afterFind'方法來相應地顯示它。下一步是使用行爲重構,但您的答案指向了正確的路徑。 – elitalon 2011-03-12 15:04:40