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 中的异常渲染器并扩展了 ExceptionRenderer,其中 MyExceptionRenderer 仅覆盖了父方法之一。该发行版已经包含文件 app/View/Layouts/error.ctp,所以我只是对其进行了一些编辑。

我还注意到 CakeError 已被弃用,所以这对我有用。

应用程序/配置/core.php:

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

应用程序/Lib/错误/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 回答