मैंने पढ़ा है कि AppError क्लास पिछली संगतता के लिए है और इसके बजाय अपवादों का उपयोग किया जाना चाहिए। 404 त्रुटियों, या पूरी तरह से कस्टम त्रुटियों जैसी चीजों के लिए कस्टम त्रुटि पृष्ठ बनाने के बारे में कोई कैसे जाता है?केकपीएचपी 2.0 - कस्टम त्रुटि पेज कैसे बनाएं?
उत्तर
इस प्रयास करें:
/app/Config/core.php
अपवाद एक AppExceptionRender
के रूप में स्थापित करने की आवश्यकता पर प्रस्तुत करना। उदाहरण:
Configure::write('Exception', array(
'handler' => 'ErrorHandler::handleException',
'renderer' => 'AppExceptionRenderer',
'log' => true
));
/app/Controller/ErrorsController.php
class ErrorsController extends AppController {
public $name = 'Errors';
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('error404');
}
public function error404() {
//$this->layout = 'default';
}
}
/app/Lib/Error/AppExceptionRenderer.php
App::uses('ExceptionRenderer', 'Error');
class AppExceptionRenderer extends ExceptionRenderer {
public function notFound($error) {
$this->controller->redirect(array('controller' => 'errors', 'action' => 'error404'));
}
}
/ऐप्स/देखें/त्रुटियाँ/error404। सीटीपी
<div class="inner404">
<h2>404 Error - Page Not Found</h2>
</div>
इसे डालने की आवश्यकता है जहां आपको चाहिए: throw new NotFoundException();
आप CustomErrorPages
या Exeptions
बना सकते हैं बस अपनी त्रुटि के class
बनाकर। इस वर्ग को CakeExeption
का विस्तार करने की आवश्यकता है। फिर अपने exeptionlogic और अपने सेट का निर्माण करें। अब आप केवल throw new <YourExeptionClass>()
कर सकते हैं और यह एक त्रुटि प्रदर्शित करेगा।
प्रलेखन: CakeExceptions
लेकिन मैं उस त्रुटि को 404 के लिए कब फेंक दूंगा? मेरा मतलब है कि अब ऐप 404 पेज को कैसे अनुकूलित करता है? – BadHorsie
404-त्रुटि पृष्ठ की सामग्री को कस्टमाइज़ करने के लिए और कस्टम तर्क की आवश्यकता नहीं है, बस app/View/Errors/error400.ctp
की सामग्री संपादित करें।
ऐसा लगता है कि यह कहीं भी ठीक से प्रलेखित नहीं किया गया है।
धन्यवाद आप सर को लोड करते हैं !! –
इस त्रुटि पृष्ठ को लोड करने के लिए अपवाद फेंकना पर्याप्त है - 'नया नोटफॉउंड अपवाद();' –
फेंक दें आपको अधिक अपवॉट्स चाहिए .. मेरा ले लो;) – Karma
नाम 404 या कुछ भी साथ लेआउट बनाएं और एप्लिकेशन नियंत्रक
function _setErrorLayout() {
if ($this->name == 'CakeError') {
$this->layout = '404';
}
}
function beforeRender() {
$this->_setErrorLayout();
}
में उपयोग आप केवल डिफ़ॉल्ट की बजाय किसी दूसरे लेआउट का उपयोग करने, बस अपने error400.ctp अंदर $this->layout = 'your_error_layout';
जोड़ने (देख रहे हैं या कोई अन्य त्रुटि पृष्ठ जिसे आप व्यू/त्रुटियों के अंतर्गत बनाते हैं)।
स्वीकृत उत्तर सबसे अच्छा विकल्प नहीं है क्योंकि वे आपके ब्राउज़र के यूआरएल को http://example.com.br/error/error404
पर रीडायरेक्ट करते हैं और उपयोगकर्ता इस त्रुटि को उत्पन्न करने के लिए इनपुट किए गए पृष्ठ का पालन नहीं कर सकता है।
बेहतर तरीका इस स्थिति को संभालने के लिए View/Errors/error400.ctp
पर संपादित फ़ाइल है, इसलिए जब आप इनपुट http:example.com/crazy-wrong-url
की तरह एक नहीं मिला यूआरएल, ब्राउज़र इस यूआरएल रख लेकिन error400.ctp
फ़ाइल जिसे आप संपादित की सामग्री प्रस्तुत करना होगा।
आप लेआउट उस दृश्य आप अपने ध्यान में रखते हुए इस टाइप कर सकते हैं रेंडर किया जाएगा बदल चाहते हैं <?php $this->layout = 'error'; ?>
आज कि संभव है (CakePHP 2.x में $error->getCode()
का उपयोग कर सीटीपी फ़ाइल में excpetion कोड प्राप्त करने के की खोज की थी, कम से कम)।
$error
थे केक अपवाद वस्तु डालता है ...
अब आप इस मान के आधार पर if/else
सशर्त ब्लॉक के साथ अपने दृश्य की सामग्री को बदलने में सक्षम होना चाहिए।
इसके अलावा, इसे काम करने के लिए, आपको core.php फ़ाइल में अपवाद रेंडरर को 'AppExceptionRenderer' के रूप में निर्दिष्ट करने की आवश्यकता है। –
धन्यवाद @ जोनाथन कैरन्स, मैं उस नवाचार का उल्लेख करना भूल गया। कोड उदाहरण में जोड़ा गया। –
धन्यवाद, यह काम करता है। यदि आप केवल अपने पृष्ठ की सामग्री को कस्टमाइज़ करना चाहते हैं और कस्टम तर्क की आवश्यकता नहीं है, तो यह निर्दिष्ट एंटोस नियंत्रक के निर्माण को छोड़ने के लिए पर्याप्त है और इसके बजाय आपके AppExceptionRenderer में पेज-कंट्रोलर पर रीडायरेक्ट करना पर्याप्त है। – bfncs