如何在 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此致敬意