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

CakePHP 2.1中所有错误的自定义布局,php,cakephp,Php,Cakephp,在CakePHP 2.1中,如何使用自定义布局来处理错误 我浏览了文档,看到了关于自定义处理程序等的各种提及,但没有关于选择要使用的布局的内容。。。有什么想法吗 在CakePHP 1.3之前的版本中,您可以创建一个AppError类,但这将不再有效,因为CakeError现在已贬值,并且根据新应用程序的文档,这样做会受到嘲笑。在core.php中,我将错误处理程序和异常处理程序切换为自定义处理程序: App::uses('MyErrorHandler', 'Tools.Error'); Conf

在CakePHP 2.1中,如何使用自定义布局来处理错误

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


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

在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/
(插件或非插件)


示例:

在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/
(插件或非插件)


示例:

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

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

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

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

这就是我在CakePHP 2.2.2中所做的:我在core.php和extended exception renderer中更改了异常呈现程序,MyExceptionRenderer只覆盖父级的一个方法。这个发行版已经包含了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);
  }

}

这就是我在CakePHP 2.2.2中所做的:我在core.php和extended exception renderer中更改了异常呈现程序,MyExceptionRenderer只覆盖父级的一个方法。这个发行版已经包含了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);
  }

}
只要写

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

在您的视图中/Errors/404.ctp视图/Errors/500.ctp

像这样

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

@法弗鲁齐尔/@fetruzie 致以最诚挚的问候

请写信

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

在您的视图中/Errors/404.ctp视图/Errors/500.ctp

像这样

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

@法弗鲁齐尔/@fetruzie
致以最良好的祝愿

我想做的就是更改布局,我真的需要写所有的代码吗???哦,我想你还想做更多。。嗯,对于一个布局来说,可能只有更简单的解决方案-例如,在AppController beforeRender中(检查控制器==错误)。我想我在1.3中使用了这个:
如果($this->name=='Error'){//switch layout with$this->layout='some'}
我想做的就是更改布局,我真的需要写所有的代码吗,我以为你想做得更多。。好的,对于一个布局,可能只有更简单的解决方案-例如,在AppController beforeRender中(check on Controller==Error)。我想我在1.3中使用了这一点:
if($this->name=='Error'){//用$this->layout='some'切换布局}