如何为 CakePHP 2.1 中的错误使用自定义布局?
我浏览了文档并看到了自定义处理程序等的各种提及,但没有选择要使用的布局......有什么想法吗?
在像 1.3 之前的 CakePHP 版本中,您可以创建一个 AppError 类,但这将不再起作用,因为 CakeError 现在已被贬低,并且根据新应用程序的文档,做任何类似的事情都会受到蔑视。
您可以在 beforeRender() 函数中更改布局,如下所示:-
public function beforeRender(){
if($this->name == 'CakeError'){
$this->layout = 'error';
}
}
这就是我在 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);
}
}
在 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/
(不管是插件还是不)
写吧
$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 最好的问候