2

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

CakePHP 2.0+で例外処理用のカスタムビューを作成することについて、そしてそれをベースとして使用して、自分のアプリケーションで同じことを開始し、それによって自分の質問を開始しました。

しかし、私は論理に従っていません。たとえば、Throw NotFoundExceptionは、名前付けに関して直接的な関係が見られないため、Errors ControllerのnotFoundメソッドを呼び出すことをどのように知っていますか...要点を見逃していない限り?

いずれにせよ、404、403、および401エラーを追加してから、カスタムビューを作成し、アプリ全体で例外ハンドラーを使用してそれらを呼び出すことができるようにしたいと考えています。

誰かがこれにもっと光を当てることができますか?Cake2.1の最新バージョンを使用しています

だから私は次のコードを持っています:

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

しかし、それは空白のページを示しているだけです...リダイレクトを実行したくないので、誰かが私を助けてくれますか?エラーが発生したときに、規則に従い、同じURLで実際のビューをレンダリングしたいと思います。

更新:カスタムビューは、例外がコントローラーで手動で呼び出された場合にのみ呼び出され、その他の実際のエラーでは呼び出されないdomain.com/garbageurlことにも注意してください...したがって、私が思っていたようには機能していないようです。

4

2 に答える 2

1

コア Cake のこれらのファイルを見てください。

何が起こっているかは次のとおりです。

  • ErrorHandler::handleException()あなたの例外ハンドラです。例外がスローされたときに呼び出されます。
  • ErrorHandler::handleException()スローされた例外の名前を解析し、そこから を設定する呼び出しExceptionRenderer::__construct()(カスタム例外レンダラーは を拡張する必要があります) 。ExceptionRenderer$this->method
  • ErrorHandler::handleException()次に、call_user_func_array()ExceptionRenderer::render()を使用して名前が のメソッドを呼び出す を呼び出します。$this->method
于 2012-05-31T21:44:12.130 に答える
0

私はちょうど同じことを探していましAppExceptionRenderer. error403 と error404 のテンプレート ファイルを別々にすることはできません。

/app/View/Errors/error400.ctp そのため、代わりにファイルでこれを行いました...

<? if ($error instanceof ForbiddenException) { ?>

    <h4>Whoops! The page you attempted to access 
        requires permissions that you don't have.</h4>  

<? } else { ?>

    <h4>Whoops! We couldn't find the page you were looking for, sorry!</h4> 

<? } ?>
于 2013-02-19T02:47:12.840 に答える