2012-06-29 20 views
6

CakePHP hataları için CakeError ve AppError çözümlerinin olduğunu biliyorum. Ancak denetleyicide yeniden yönlendirme yapmam gerekiyor.CakePHP durum koduyla yeniden yönlendirme 404

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

Ama bu 404 durum kodu yaratmaz:

AppController yılında vardır. 302 kodu oluşturur. Bunun için kod değiştirildi:

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

Ama sonuç aynıdır.

ben bu ilave, o da kaldırılmış işe yaramadı:

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

nasıl yönlendirmek denetleyicisi içinde 404 kodu gönderebilir? 404 hatası dönmek istiyorsanız

cevap

17

, bunun için CakeError desteği yerleşik kullanın:

throw new NotFoundException(); 

Sen denetleyicisinden bu istisna olabilir ve 404 yanıtı oluşturmak gerekir.

here adresinde daha fazla yerleşik istisna vardır.

Özel bir hata sayfası yapmakla ilgileniyorsanız, bkz. this post. Aksi takdirde, 404 başlık kodunu döndürmenin ve yine de yeniden yönlendirmenin mümkün olduğunu düşünmüyorum. Http, yönlendirme durum kodlarını be in the 300s olarak belirtir ve bu CakePHP'nin izlediği kuraldır.

3

Bazı nedenlerden dolayı yeniden yönlendirme() kullanılarak durum kodu 3xx olarak değiştirilir. Başka bir eylemi yürütmek ve hala 404 dönmek istiyorsanız aşağıdaki gibi yapabilirsiniz: Bu yönlendirme olmadan Mycontroller :: hatası (404) çalıştırır

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

.

-1

CakePHP'nin 3

use Cake\Network\Exception\NotFoundException; 
... 
throw new NotFoundException(__('Article not found'));