私の目標:私はデフォルトのCakePHPのFormHelperの日付ピッカーは、要素を選択を嫌いと私が代わりにjQueryのUI DatePickerのウィジェットを使用したいデフォルトケーキ日付ピッカー
を交換してください。正常に機能を低下させるために、私は日付フィールド(ウィジェットで有効)とタイムピッカーの選択ボックスを15分単位で制限したいと思っています。CakePHPで複雑なデータ型を処理する最良の方法は何ですか?
私が悪い、ここではそれがどのように見えるかであることを説明した場合には:繰り返しを最小限に抑えるために
私の理想のソリューション
、私はレイアウト要素とプロセスでHTMLを入れたいですこれはBehavior関数を使用します。時間それによって、
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
)コールバックに到達すると、datepicker & timepickerフィールドは、モデルのdeconstruct
関数によって破棄されました。 deconstruct
は、FormHelperがそれらを作成する方法を報告するために、&回の日付を探しているようです。要するに
[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'を使います。結果は、モデル、オーバーライドされたアプリケーションモデル、またはビヘイビアで 'beforeValidate'または' beforeSave'を使用して同じです – Farray