9

CakePHPエラーの場合、CakeErrorとAppErrorのソリューションが存在することを私は知っています。しかし、コントローラー内でリダイレクトを行う必要があります。

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コードを送信するにはどうすればよいですか?

4

3 に答える 3

22

404 エラーを返したい場合は、組み込みの CakeError サポートを使用します。

throw new NotFoundException();

コントローラーからこの例外をスローすると、404 応答が生成されます。

ここには、さらに組み込みの例外があります

カスタム エラー ページの作成に関心がある場合は、この投稿を参照してください。

そうでなければ、404 ヘッダー コードを返してリダイレクトすることはできないと思います。Http はリダイレクトステータスコードが300 番台になるように指定しており、これは CakePHP が従う規則です。

于 2012-06-29T21:13:16.700 に答える
7

何らかの理由でredirect()を使用すると、ステータスコードが3xxに変更されます。別のアクションを実行しても404を返したい場合は、次のように実行できます。

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

これにより、リダイレクトなしでMycontroller :: error(404)が実行されます。

于 2013-01-02T19:42:59.293 に答える