CakePHP 2.1 中所有错误的自定义布局


Custom layout for ALL errors in CakePHP 2.1

如何在 CakePHP 2.1 中使用自定义布局来解决我的错误?

我已经浏览了文档,看到了各种自定义处理程序等的提及,但没有选择要使用的布局......有什么想法吗?

在之前的 CakePHP 版本中,如 1.3,您可以创建一个 AppError 类,但这将不再有效,因为 CakeError 现在已贬值,并且根据新应用程序的文档,做类似的事情都会受到蔑视。

您可以在 beforeRender() 函数中更改布局,如下所示:-

public function beforeRender(){
  if($this->name == 'CakeError'){
      $this->layout = 'error';
   }        
}
这是我

在 CakePHP 2.2.2 中所做的:我在 core 中更改了异常渲染器.php并使用 MyExceptionRenderer 扩展了 ExceptionRenderer,只覆盖了父方法之一。该发行版已经包含文件app/View/Layouts/error.ctp,所以我只是对其进行了一点编辑。

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

app/Config/core.php:

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

app/Lib/Error/MyExceptionRenderer.php:

App::uses('ExceptionRenderer', 'Error');
class MyExceptionRenderer extends ExceptionRenderer {
  protected function _outputMessage($template) {
    $this->controller->layout = 'error';
    parent::_outputMessage($template);
  }
}

在核心中.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

$this->layout = 'my_error' 

在错误 400.ctp 和错误 500.ctp 文件中

在您的视图中/错误/404.ctp 视图/错误/500.ctp

喜欢这个

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

@faferuziel/@fetruzie此致敬意