web-dev-qa-db-ja.com

CakePHP 2.0-カスタムエラーページの作成方法

AppErrorクラスは後方互換性のためのものであり、代わりに例外を使用する必要があることを読みました。 404エラーや完全にカスタムエラーなどのカスタムエラーページを作成するにはどうすればよいですか?

31
BadHorsie

これを試して:

/app/Config/core.php

例外レンダリングはAppExceptionRenderとして設定する必要があります。例:

_Configure::write('Exception', array(
        'handler' => 'ErrorHandler::handleException',
        'renderer' => 'AppExceptionRenderer',
        'log' => true
));
_

/app/Controller/ErrorsController.php

_class ErrorsController extends AppController {
    public $name = 'Errors';

    public function beforeFilter() {
        parent::beforeFilter();
        $this->Auth->allow('error404');
    }

    public function error404() {
        //$this->layout = 'default';
    }
}
_

/app/Lib/Error/AppExceptionRenderer.php

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

class AppExceptionRenderer extends ExceptionRenderer {

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

/app/View/Errors/error404.ctp

_<div class="inner404">
    <h2>404 Error - Page Not Found</h2>
</div>
_

必要な場所に挿入します:throw new NotFoundException();

46
Andrew Kulakov

404エラーページのコンテンツをカスタマイズし、カスタムロジックを必要としないようにするには、app/View/Errors/error400.ctpのコンテンツを編集します。

これはどこでも適切に文書化されていないようです。

40
bfncs

デフォルトの代わりに別のレイアウトを使用する場合のみの場合、単に$this->layout = 'your_error_layout';をerror400.ctp内(または[表示/エラー]で作成した他のエラーページ)に挿入します。

7
user221931

404などの名前のレイアウトを作成し、アプリコントローラーで使用します

function _setErrorLayout() {
    if ($this->name == 'CakeError') { 
        $this->layout = '404';
    }
}
function beforeRender () {
    $this->_setErrorLayout();
}
5
Cake PHP

ブラウザのURLをhttp://example.com.br/error/error404にリダイレクトし、ユーザーが入力したページをたどってこのエラーを生成することはできないため、受け入れられた回答は最良の選択肢ではありません。

この状況を処理するより良い方法は、View/Errors/error400.ctpのファイルを編集することです。したがって、http:example.com/crazy-wrong-urlのような見つからないURLを入力すると、ブラウザーはこのURLを保持しますが、error400.ctp編集すること。

ビューがレンダリングされるレイアウトを変更する場合は、ビューにこれを入力します<?php $this->layout = 'error'; ?>

2
Daniel Faria

表示するエラーのCustomErrorPagesを作成するだけで、Exeptionsまたはclassを作成できます。このクラスはCakeExeptionを拡張する必要があります。次に、exeptionlogicとセットを構築します。これで、throw new <YourExeptionClass>()だけを実行でき、エラーが表示されます。

ドキュメント: CakeExceptions

0
Jonas Millan

今日、$error->getCode()(少なくともCakePHP 2.xで)を使用してctpファイルに例外コードを取得できることを発見しました。

$errorは、Cakeが例外オブジェクトを配置したものです...

これで、この値に基づいて、if/else条件ブロックを使用してビューのコンテンツを変更できるようになります。

0
Jorge Junior