2012-06-29 13 views
6

CakePHPエラーの場合、私はCakeErrorとAppErrorの解決策があることを知っています。 しかし、私はコントローラ内でリダイレクトを行う必要があります。ステータスコード404でCakePHPリダイレクト

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

をしかし、これは404のステータスコードを作成しません:

のAppController で存在します。これは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

redirect()を使用すると、ステータスコードが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')); 
関連する問題