मैंने केकेपीएचपी 1.3 के साथ काम किया है, लेकिन यह केकपीएचपी 2.0 और PHP अपवादों में मेरा पहला प्रयास है, इसलिए मेरा प्रश्न शब्दशः लगता है तो मेरे साथ सहन करें।केकपीएचपी 2.0 - पहलेफिल्टर() केकरर कंट्रोलर पर नहीं चल रहा है?
मेरे AppController
के beforeFilter()
में मैंने अपने दृश्य टेम्पलेट में उपयोग के लिए $this->set()
के माध्यम से कुछ चर सेट किए हैं।
public function beforeFilter() {
parent::beforeFilter();
if (userDeniedAccess()) {
throw new ForbiddenException();
}
}
जहां काल्पनिक समारोह userDeniedAccess()
मेरे प्राधिकरण के चेकों समाहित:
UsersController
कोड रहा है कि इस तरह मोटे तौर पर लग रहा है में
।
यह सब ठीक काम करता है, और जब मुझे उम्मीद है तो मुझे 403 त्रुटि मिलती है। हालांकि, जब अपवाद फेंक दिया जाता है, तो दृश्य चर जो AppController::beforeFilter()
में सेट किए गए थे अब सेट नहीं होते हैं, जिसके परिणामस्वरूप मेरे दृश्य टेम्पलेट से त्रुटियां होती हैं। जब अपवाद फेंक दिया गया है, चर सही ढंग से सेट हैं।
यदि मुझे जरूरी है तो मैं लापता चर के आसपास कोड कर सकता हूं, लेकिन मैं वास्तव में जानना चाहता हूं कि इस व्यवहार का कारण क्या है। मेरे UsersController
और CakeErrorController
दोनों AppController
का विस्तार करें। स्वाभाविक रूप से, मुझे उम्मीद है कि जब अपवाद फेंक दिया जाता है और CakeErrorController
तत्काल होता है, तो यह मेरे लिए एक ही दृश्य चर उत्पन्न करेगा।
हालांकि, ऐसा लगता है कि Controller::startupProcess()
विधि (जिसमें beforeFilter()
पर कॉल शामिल है) को कभी भी CakeErrorController
पर कॉल नहीं किया जाता है। जैसा कि मैं इसे समझता हूं, यह नियमित अनुरोधों के लिए प्रेषक द्वारा किया जाता है, लेकिन त्रुटि नियंत्रक का जीवन चक्र अलग होता है।
मैंने केकपीएचपी 1.3 में समान व्यवहार के विवरण (like this one) को देखा है, लेकिन निश्चित रूप से केकेपीएचपी के त्रुटि हैंडलिंग कोड को 2.0 में पूरी तरह से ओवरहाल किया गया है।
तो या तो:
- यह CakePHP के डिफ़ॉल्ट अपवाद हैंडलिंग में एक बग है,
- व्यवहार के रूप में इरादा और मैं बस यह समझ में नहीं आता, या
- मैं पागल हो जा रहा हूँ है।
मुझे पता है कि आप मामले 3 में मदद नहीं कर सकते हैं, लेकिन यदि पहले दो में से कोई भी लागू होता है, तो मैं किसी ऐसे व्यक्ति से इनपुट की सराहना करता हूं जो मुझसे ज्यादा जानता है।
धन्यवाद!
संपादित करें:beforeRender()
में दृश्य चर सेट करना मेरी समस्या का समाधान करता है। हालांकि, मुझे अभी भी आश्चर्य है कि क्या यह जानबूझकर है कि beforeFilter()
को कभी भी CakeErrorController
पर कॉल नहीं किया जाता है।
+1 "मैं पागल हो सकता हूं" आत्म-निदान। –