2012-06-29 14 views
6

केकपीएचपी त्रुटियों के लिए मुझे पता है कि केकईरर और एपइरर समाधान मौजूद हैं। लेकिन मुझे नियंत्रक के भीतर एक पुनर्निर्देशन करने की आवश्यकता है।केकेपीएचपी स्टेटस कोड के साथ रीडायरेक्ट 404

में AppController वहां मौजूद:

function afterFilter() { 
    if ($this->response->statusCode() == '404') 
    { 
     $this->redirect(array(
      'controller' => 'mycontroller', 
      'action' => 'error', 404),404 
     ); 
    } 
} 

लेकिन यह 404 स्थिति कोड नहीं बनाता है। यह 302 कोड बनाता है। मैं इस के लिए कोड बदल दिया है:

$this->redirect('/mycontroller/error/404', 404); 

लेकिन परिणाम एक ही है।

मैं इस जोड़े गये है, यह काम नहीं किया भी पदावनत:

$this->header('http/1.0 404 not found'); 

मैं कैसे अनुप्रेषित नियंत्रक के भीतर एक 404 कोड भेज सकते हैं?

उत्तर

17

आप एक 404 त्रुटि वापस जाने के लिए चाहते हैं, तो इसके लिए CakeError समर्थन में बनाया का उपयोग करें:

throw new NotFoundException(); 

आप अपने नियंत्रक से इस अपवाद है और यह 404 प्रतिक्रिया उत्पन्न करनी चाहिए कर सकते हैं।

here में अधिक अंतर्निहित अपवाद हैं।

यदि आप कस्टम त्रुटि पृष्ठ बनाने में रुचि रखते हैं, तो this post देखें।

अन्यथा, मुझे नहीं लगता कि 404 हेडर कोड वापस करना और अभी भी रीडायरेक्ट करना संभव है। एचटीपी be in the 300s पर रीडायरेक्ट स्टेटस कोड निर्दिष्ट करता है, और यह सम्मेलन केकपीएचपी का पालन करता है।

3

किसी कारण से रीडायरेक्ट() का उपयोग स्थिति कोड को 3xx में बदल देगा। यदि आप किसी अन्य कार्रवाई अमल करने के लिए और अभी भी 404 चाहते हैं तो आपको इस प्रकार कर सकते हैं:

$this->controller->response->statusCode(404); 
$this->controller->render('/mycontroller/error/404'); 
$this->controller->response->send(); 

इस रीडायरेक्ट बिना Mycontroller :: त्रुटि (404) पर अमल होगा।

-1

CakePHP 3

use Cake\Network\Exception\NotFoundException; 
... 
throw new NotFoundException(__('Article not found')); 
संबंधित मुद्दे