我的目標:替換默認的蛋糕日期選擇器
我討厭默認CakePHP的表單助手日期選擇器中選擇元素,我想使用jQuery UI日期選擇器窗口小部件來代替。爲了優雅地降級,我希望有一個日期字段(使用小部件啓用)和一個時間選擇器選擇框約束爲15分鐘的增量。在CakePHP中處理複雜數據類型的最佳方法是什麼?
萬一我解釋說不好,這裏是什麼樣子:
我的理想解決方案
爲了減少重複,我想提出的HTML佈局中的要素和過程它使用行爲功能。這樣我可以做類似如下:
view.ctp
echo $this->element('datepicker', array('data' => $data));
model.php
$actsAs = array('Datepicker');
function beforeSave($options){
$this->parseDatepickers(); //behavior function would alter $this->data
return true;
}
的問題
不幸的是,在一次獲取到beforeSave
(或beforeValidate
)回調,在日期選擇器& timepicker領域已經由模型的deconstruct
功能破壞。 deconstruct
似乎在尋找日期&次報告表單助手創建它們的方式。
總之,它在尋找:
[date_field] => Array
(
[year] => 2011
[month] => 11
[day] => 11
[hour] => 8
[min] => 00
[meridian] => pm
)
,而是它的發現:
[date_field] => Array
(
[datepicker] => 11/11/2011
[timepicker] => 8:00 pm
)
而且因爲它沒有找到,預計結構,我結束了這一點:
[date_field] =>
我知道我可以有適當命名的jQuery領域更新隱藏的輸入,但這不會退化。
目前的解決方法
我在做什麼,就目前而言,是節約之前通過我的行爲函數的數據清洗 - 但這並不覺得這樣做的正確方法:
$this->request->data = $this->Event->fixDates($this->data);
$this->Event->save($this->data);
所以...............
什麼是做到這一點的最好方法是什麼?把它beforeSave
或beforeValidate
好像「蛋糕的方式」,但deconstruct
殺死我。我是否需要擴展AppModel並覆蓋deconstruct
?這看起來也很醜陋。
你有沒有嘗試過鉤入'beforeValidate'? – deceze
@deceze是的。 'Model :: save()'在調用任何'before'回調之前調用'$ this-> set()'。 'set'使用'deconstruct'。在模型,重寫的appmodel或行爲中使用'beforeValidate'或'beforeSave'的結果是一樣的 – Farray