2009-05-11 14 views
5

कोडइग्निटर में /system/application/errors/error_404.php है जो प्रदर्शित होता है जब प्रभावी रूप से "नियंत्रक नहीं मिला" स्थिति के कारण 404 होता है। हालांकि, मेरे प्रोजेक्ट के लिए, मुझे वास्तव में इस त्रुटि को संभालने की आवश्यकता है जैसे कि नियंत्रक वर्ग से कोई विधि गुम हो जाती है। उस स्थिति में, मैं एक सुंदर दृश्य के साथ एक सामान्य दृश्य दिखाता हूं: पृष्ठ नहीं मिला: शायद आप इसका मतलब था? ... "पृष्ठ डेटाबेस से उत्पन्न नेविगेशन आदि के साथ पूरा हुआ है।कोडइग्निटर के लिए मैं एक सभ्य त्रुटि 404 हैंडलर कैसे बना सकता हूं?

मेरे विचार यह है कि मैं दो चीजों में से एक कर सकता हूं :

  1. एक मौजूदा (या विशेष) नियंत्रक के 404 हैंडलर
  2. पर रीडायरेक्ट करने डिफ़ॉल्ट रूटर किसी तरह इसे संभाल में जोड़ें header("Location: /path/to/error_page") कॉल बनाएँ।

आवश्यक परिणाम प्राप्त करने का सबसे अच्छा तरीका क्या है? क्या देखने के लिए कोई नुकसान है?

उत्तर

2

मैं Smarty के साथ CodeIgniter का उपयोग करता हूं। मेरे पास स्मार्टफ़ी क्लास में एक अतिरिक्त फ़ंक्शन है जिसे नोटफॉउंड() कहा जाता है। कॉलिंग notfound() सही हेडर स्थान को 404 पेज पर सेट करता है और फिर 404 टेम्पलेट प्रदर्शित करता है। टेम्पलेट में एक ओवरराइड करने योग्य शीर्षक और संदेश है, इसलिए यह बहुत बहुमुखी है। इसी तरह

$this->load->model('article_model'); 
$article = $this->article_model->get_latest(); 

if ($article) { 
    $this->smarty->assign('article', $article); 
    $this->smarty->view('article'); 
} else { 
    $this->smarty->assign('title', Article not found'); 
    $this->smarty->not_found(); 
} 

, मैं करने के लिए /system/application/error/error_404.php में कोड बदल सकते हैं::

Smarty.class.php 

function not_found() { 
header('HTTP/1.1 404 Not Found'); 

if (!$this->get_template_vars('page_title')) { 
    $this->assign('page_title', 'Page not found'); 
    } 

    $this->display('not-found.tpl'); 
    exit; 
} 

एक नियंत्रक में मैं कुछ इस तरह कर सकते हैं: यहां कुछ नमूना कोड है

$CI =& get_instance(); 
$CI->cismarty->not_found(); 

यह बहुत अच्छा काम करता है, कोड की एक छोटी राशि का उपयोग करता है, और विभिन्न प्रकार की गायब इकाइयों के लिए 404 कार्यक्षमता को डुप्लिकेट नहीं करता है।

मुझे लगता है कि आप अंतर्निहित कोडइग्निटर विचारों के साथ एक ही चीज़ कर सकते हैं। महत्वपूर्ण बात यह है कि आप अपनी दृश्य सामग्री करने से पहले हेडर को थूकना चाहते हैं।

अद्यतन:

Using Smarty with CodeIgniter

: मैं एक कस्टम चतुर आवरण यहाँ वर्णित के समान का उपयोग