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

时间:2012-04-21 10:11:30

标签: php cakephp

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

我查看了文档并看过各种自定义处理程序等提及但没有选择要使用的布局......有什么想法吗?

在1.3之前的CakePHP版本中,您可以创建一个AppError类,但由于CakeError现在已经过折旧,因此不再有效,并根据新应用程序的文档对此进行任何操作。

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

这就是我在CakePHP 2.2.2中所做的:我更改了core.php中的异常渲染器,并使用MyExceptionRenderer扩展了ExceptionRenderer,只覆盖了其中一个父方法。分发已包含文件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);
  }

}

答案 2 :(得分: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

答案 3 :(得分:0)

只需写下

$this->layout = 'my_error' 
在你的error400.ctp和error500.ctp文件中

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

像这样

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

@faferuziel / @fetruzie 最好的问候