1

CakePHP 2.1 でエラーにカスタム レイアウトを使用するにはどうすればよいですか?

私はドキュメントに目を通し、カスタムハンドラーなどのさまざまな言及を見てきましたが、使用するレイアウトの選択については何もありません...何かアイデアはありますか?

1.3 のような以前のバージョンの CakePHP では、AppError クラスを作成できましたが、CakeError が減価償却され、そのようなことを行うことは新しいアプリケーションのドキュメントに従って軽蔑されているため、これは機能しなくなります。

4

4 に答える 4

3

以下のように beforeRender() 関数でレイアウトを変更できます:-

public function beforeRender(){
  if($this->name == 'CakeError'){
      $this->layout = 'error';
   }        
}
于 2012-05-09T14:59:17.393 に答える
2

これは私が CakePHP 2.2.2 で行ったことです: core.php の例外レンダラーを変更し、親のメソッドの 1 つだけをオーバーライドする MyExceptionRenderer で ExceptionRenderer を拡張しました。ディストリビューションには既にファイル app/View/Layouts/error.ctp が含まれているので、少し編集しました。

また、 CakeError が非推奨になっていることに気付いたので、これでうまくいきました。

app/Config/core.php:

Configure::write('Exception', array(
  'handler' => 'ErrorHandler::handleException',
  'renderer' => 'MyExceptionRenderer',
  'log' => true
));

アプリ/ライブラリ/エラー/MyExceptionRenderer.php:

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

class MyExceptionRenderer extends ExceptionRenderer {

  protected function _outputMessage($template) {
    $this->controller->layout = 'error';
    parent::_outputMessage($template);
  }

}
于 2012-09-23T23:04:29.400 に答える
1

core.php で、エラー ハンドラーと例外ハンドラーをカスタム ハンドラーに切り替えます。

App::uses('MyErrorHandler', 'Tools.Error');
Configure::write('Error', array(
    'handler' => 'MyErrorHandler::handleError',
    'level' => E_ALL & ~E_DEPRECATED & ~E_STRICT,
    'trace' => true
));

Configure::write('Exception', array(
    'handler' => 'MyErrorHandler::handleException',
    'renderer' => 'Tools.MyExceptionRenderer',
    'log' => true
));

次に、クラスを配置する必要がありますLib/Error/(プラグインかどうかに関係なく)

例: https://github.com/dereuromark/tools/tree/2.0/Lib/Error

于 2012-04-21T10:24:40.940 に答える
0

書くだけ

$this->layout = 'my_error' 

error400.ctp および error500.ctp ファイルに

あなたの View/Errors/404.ctp View/Errors/500.ctp

このような

<?php $this->layout = 'my_error' ?>
<!doctype html>
<html>
<head>
</head>
<body>
</body>
</html>

@faferuziel / @fetruzieよろしくお願いします

于 2015-06-09T02:22:39.863 に答える