मेरे लक्ष्य: बदलें डिफ़ॉल्ट केक Datepicker
मुझे नफरत है डिफ़ॉल्ट CakePHP FormHelper डेट-पिकर तत्वों का चयन करें और मैं बजाय jQuery के यूआई datepicker विजेट का उपयोग करना चाहते हैं। शानदार ढंग से अपनाने के लिए, मैं एक दिनांक फ़ील्ड (विजेट के साथ सक्षम) और एक समय-पिकर चयन बॉक्स 15 मिनट की वृद्धि के लिए बाध्य होना चाहता हूं।केकपीएचपी में जटिल डेटाटाइप को संसाधित करने का सबसे अच्छा तरीका क्या है?
मामले में मैं ने बताया कि खराब है, यहाँ यह क्या लग रहा है की तरह है:
मेरे आदर्श समाधान
पुनरावृत्ति को कम से कम करने के लिए, मैं एक लेआउट तत्व और इस प्रक्रिया में एचटीएमएल रखना चाहते हैं यह एक व्यवहार समारोह का उपयोग कर रहा है। इस तरह से मैं निम्नलिखित की तरह कुछ कर सकता है:
दुर्भाग्य
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
) पर कॉलबैक, डेटपिकर & टाइमपिकर फ़ील्ड मॉडल के 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
मुझे मारता है। क्या मुझे ऐपमोडेल का विस्तार करने और deconstruct
ओवरराइड करने की आवश्यकता है? वह भी बदसूरत लगता है।
क्या आपने 'पहले से वैध' में शामिल होने की कोशिश की है? – deceze
@ हां हां। 'मॉडल :: सेव()' कॉल '$-> सेट()' कॉल करने से पहले 'कॉल' से पहले किसी भी कॉल को कॉल करें। 'सेट' 'deconstruct' का उपयोग करता है। परिणाम मॉडल के पहले, ओवरराइड एपमोडेल, या व्यवहार – Farray