2012-06-29 65 views
6

對於CakePHP錯誤,我知道存在CakeError和AppError解決方案。 但我需要在控制器內進行重定向。CakePHP重定向狀態碼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頭代碼,仍然重定向。 Http指定重定向狀態碼爲be in the 300s,這是CakePHP遵循的慣例。

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'));