2016-08-30 6 views
5

मैंने अपनी वाईआई साइट में त्रुटि हैंडलर स्थापित किया है।वाईआई त्रुटि हैंडलर काम नहीं करता है जबकि फ़ाइल नहीं मिली

यहां कोड है।

main.php

'errorHandler'=>array(
     // use 'site/error' action to display errors 
     'errorAction'=>'site/error', 
), 

SiteController.php

public function actionError() { 
     if ($error = Yii::app()->errorHandler->error) { 
      if (Yii::app()->request->isAjaxRequest) 
       echo $error['message']; 
      else 
       $this->render('error', $error); 
     } 
    } 

साइट/error.php

<?php 
    $this->pageTitle=Yii::app()->name . ' - Error'; 
    $this->breadcrumbs=array(
     'Error', 
    ); 
?> 

<h2>Error <?php echo $code; ?></h2> 

<div class="error"> 
    <?php echo CHtml::encode($message); ?> 
</div> 

यह काम कर रहा है इंटरनेट ne और इस कस्टम त्रुटि पृष्ठ पर रीडायरेक्ट करें यदि यूआरएल गलत है या उपयोगकर्ता कॉल गलत काम करता है। उदाहरण के लिए, यदि साइट नियंत्रक में मैंने contact फ़ंक्शन और उपयोगकर्ता को localhost.com/site/contactsdffe जैसे यूआरएल कॉल किया है तो यह इस कस्टम त्रुटि पृष्ठ पर रीडायरेक्ट करता है।

लेकिन समस्या यहां है।

नियंत्रक समारोह दृश्य संपर्क कॉल करता है और मैं विचारों/साइट/contact.php दृश्य तो यह इस कस्टम त्रुटि पेज नहीं बुलाया जाता है सेट नहीं किया है। यह मुझे यह अपवाद त्रुटि देता है।

CException: SiteController अनुरोधित दृश्य "संपर्क" नहीं मिल रहा।

मैं क्यों त्रुटि हैंडलर इस परिदृश्य के लिए काम नहीं कर रहा पता नहीं है और कृपया मुझे पता है कि मैं कैसे त्रुटि के इस प्रकार के लिए कस्टम त्रुटि पृष्ठ दिखा सकते हैं।

कोई भी मदद की सराहना करेगा। अग्रिम में धन्यवाद !

उत्तर

1

अपनी प्रविष्टि लिपि में गलत पर YII_DEBUG की स्थापना करके production mode को CException स्विच के लिए site/error उपयोग करने के लिए (शायद अपनी परियोजना जड़ में index.php)।

कस्टम अपवाद पृष्ठ का उपयोग करने के लिए अपने protected/views/system फ़ोल्डर में कस्टम दृश्य exception.php जोड़ें।

Yii guide page on errors (जोर मेरा) से: CException, CDbException और CHttpException:

Yii तीन अपवाद वर्गों को परिभाषित करता है। CException एक सामान्य अपवाद वर्ग है। CDbException एक अपवाद का प्रतिनिधित्व करता है जो कुछ डीबी से संबंधित संचालन के कारण होता है। CHttpException एक अपवाद का प्रतिनिधित्व करता है जिसे अंतिम उपयोगकर्ताओं को प्रदर्शित किया जाना चाहिए और statusCode संपत्ति HTTP स्थिति कोड का प्रतिनिधित्व करती है। अपवाद का वर्ग यह निर्धारित करता है कि इसे कैसे प्रदर्शित किया जाना चाहिए, जैसा कि हम आगे समझाएंगे।

जब CErrorHandler एप्लिकेशन घटक में कोई त्रुटि अग्रेषित की जाती है, तो यह त्रुटि प्रदर्शित करने के लिए उपयुक्त दृश्य चुनती है। यदि त्रुटि उपयोगकर्ताओं को प्रदर्शित करने के लिए है, जैसे कि CHttpException, यह errorXXX नामक दृश्य का उपयोग करेगा, जहां XXX HTTP स्थिति कोड (उदा। 400, 404, 500) के लिए खड़ा है।यदि त्रुटि आंतरिक है और केवल डेवलपर्स को प्रदर्शित की जानी चाहिए, तो यह exception नामक दृश्य का उपयोग करेगा। बाद के मामले में, पूर्ण कॉल स्टैक के साथ-साथ त्रुटि रेखा जानकारी प्रदर्शित की जाएगी।

जब एप्लिकेशन उत्पादन मोड में चलता है, तो उन आंतरिक लोगों सहित सभी त्रुटियों को errorXXX दृश्य का उपयोग करके प्रदर्शित किया जाएगा। ऐसा इसलिए है क्योंकि किसी त्रुटि के कॉल स्टैक में संवेदनशील जानकारी हो सकती है। इस मामले में, डेवलपर्स को त्रुटि लॉग पर भरोसा करना चाहिए ताकि यह निर्धारित किया जा सके कि त्रुटि का वास्तविक कारण क्या है। एक दृश्य के लिए इसी निम्न क्रम में देखने के लिए फ़ाइल

CErrorHandler खोज:

  • WebRoot/themes/ThemeName/views/system: इस वर्तमान में सक्रिय विषय के अंतर्गत प्रणाली दृश्य निर्देशिका है।

  • WebRoot/protected/views/system: यह एप्लिकेशन के लिए डिफ़ॉल्ट सिस्टम दृश्य निर्देशिका है।

  • yii/framework/views: यह वाईआई ढांचे द्वारा प्रदान की गई मानक प्रणाली दृश्य निर्देशिका है।

पहले उदाहरण में, Yii यूआरएल के संकल्प के दौरान एक CHttpException फेंकता है और 404. एक HTTP स्थिति देता है दूसरा उदाहरण के लिए, यूआरएल सही ढंग से हल करता है तो एक आंतरिक त्रुटि उत्पन्न होती है और CException फेंक दिया जाता है ।

संबंधित मुद्दे