8

CakePHP 2.1 でエラー用のカスタム ビューを作成しようとしています。

ここで次の質問を読んでいます: CakePHP 2.0 - カスタム エラー ページを作成する方法は?

しかし、期待どおりに動作しないものがあります。

1.) 例外とエラーは同じではないようです。偽の URL にアクセスすると、組み込みの 404 ページが表示されますが、コントローラーで notfound 例外を手動で実行すると、カスタム ビューが呼び出されます...どうしてこれなの?Cake のすべてのエラーは例外を通過したと思いますか?

2.) 実際にユーザーをリダイレクトするのではなく、ビューをレンダリングしようとしています...たとえば:

App::uses('ExceptionRenderer', 'Error');

class AppExceptionRenderer extends ExceptionRenderer {
    public function notFound($error) {
        $this->controller->redirect(array('controller' => 'errors', 'action' => 'error404'));
    }
}

そのリダイレクトの代わりに、私はしようとしています:

$this->controller->layout = null;
$this->controller->render('/Errors/error404');

しかし、最終的には空白のページだけが表示されます.これはなぜですか?そして、これは手動例外を行うときにのみ発生しますか?

どなたかこの2つの質問に答えていただけませんか? ありがとう

4

3 に答える 3

9

私はついにこれを理解することができました!githubのコードを見ると、なんとか機能させることができました。ここに私の AppExceptionRenderer.php があります:

App::uses('ExceptionRenderer', 'Error');

class AppExceptionRenderer extends ExceptionRenderer {
    public function missingController($error) {
        $this->controller->render('/Errors/error404', 'layout');
        $this->controller->response->send();
    }

    public function missingAction($error) {
        $this->missingController($error);
    }
}

コントローラーのコールバックを呼び出したい場合は、beforeFilter() の前に次のようなことも行う必要があります。

$this->controller->beforeFilter();

その $this->controller->response->send(); ラインがキッカー。うまくいけば、これはあなたのために働く!

于 2012-06-12T21:21:46.663 に答える
0

これは簡単です。

public function notFound($error) {
    $this->_outputMessage('error404');
}

それはあなたがする必要があるすべてです

于 2012-12-26T04:27:26.210 に答える
-1

単に:

throw new NotFoundException;

「BuiltinExceptions」に関するドキュメントのサンプルコードを参照してください。

App::uses('ExceptionRenderer', 'Error');必須ではありません。

個々のビューの編集View/Errors/error400.ctp

于 2012-06-05T12:48:33.547 に答える