Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
报告级别0上的Cakephp 2错误_Php_Cakephp_Error Handling_Cakephp 2.3 - Fatal编程技术网

报告级别0上的Cakephp 2错误

报告级别0上的Cakephp 2错误,php,cakephp,error-handling,cakephp-2.3,Php,Cakephp,Error Handling,Cakephp 2.3,当报告级别设置为0时,我想显示一个自定义错误页面,它是500错误而不是404错误。在默认视图之外,我似乎根本无法访问错误消息 我想在正常错误布局之外设置自定义布局。我知道如果我将报告切换到1级或2级,那么效果会很好。我希望在生产中使用此选项,将其设置为0,而不是400错误。这可能吗 $error->getMessage() Q:当报告级别设置为0且为500错误时,我想显示一个自定义错误页面 A:您可以在/app/View/Errors/中编辑默认错误视图error400.ctp和error500

当报告级别设置为0时,我想显示一个自定义错误页面,它是500错误而不是404错误。在默认视图之外,我似乎根本无法访问错误消息

我想在正常错误布局之外设置自定义布局。我知道如果我将报告切换到1级或2级,那么效果会很好。我希望在生产中使用此选项,将其设置为0,而不是400错误。这可能吗

$error->getMessage()

Q:当报告级别设置为0且为500错误时,我想显示一个自定义错误页面

A:您可以在
/app/View/Errors/
中编辑默认错误视图
error400.ctp
error500.ctp

Q:我想在正常错误布局之外设置一个自定义布局

A:如果要使用其他(自定义)布局,可以将文件
CakeErrorController.php
/lib/Cake/Controller/
复制到
/app/Controller/
,并在函数中添加以下行:

函数构造($request=null,$response=null){ $this->layout='your layout name';//在函数中添加此行 // ... } 并像往常一样在
/app/View/Layouts/
中添加模板文件,例如
您的布局名称.ctp

如果您想在错误页面/布局中显示应用程序中的数据(如从数据库生成主菜单),您还可以在错误控制器中添加更多自定义代码,例如:

// Error controller in /app/Controller/CakeErrorController.php
class CakeErrorController extends AppController {
  public $uses = array('MenuCategory'); // load relevant table/model
  public function __construct($request = null, $response = null) {
    $this->set('mainmenu', $this->MenuCategory->getMenu()); // or find() or whatever
    // ...
  }
}
Q:如何在生产模式(调试级别=0)中保留不同的错误消息

A根据“默认情况下,ErrorHandler在调试>0时显示错误,在调试=0时记录错误”。原因是,例如,您不应向公众访问者(在生产模式下)显示类似“缺少组件”的错误消息,因为此错误与访问者无关,对访问者没有用处(所以404/500得到了响应)。这些错误只与开发相关,应该在进入生产模式之前修复

如果要更改此行为,您必须设置自己的错误处理,正如中所述。请直接查看中的说明。如有必要,您也可以创建自己的错误处理

如果您在使用/创建自己的错误处理程序时遇到问题,请开始一个关于Stackoverflow的新问题,并提供更多详细信息:您创建了哪些文件(例如您的错误处理程序和/或异常),你的代码看起来怎么样,你试图解决什么问题…请给出一个明确的例子,说明你想要实现什么(例如,在我的答案的第一版下面的评论中,您谈论的是特殊的500个错误-是什么触发了这些错误,您希望响应什么而不是500,或者您希望更改什么…)

在某些情况下,替代解决方案也可能是这样的:

//在控制器中
公共功能版主视图($id=null){
//您的错误检查,在本例中为用户角色
如果($this->Auth->user('role')!=“版主”){
//自定义错误消息
$this->Flash->custom('您不是版主');
//重定向到特殊错误页面
//在本例中,转到上一页
返回$this->redirect(
$this->referer(
//如果没有推荐人,则转到默认页面
数组('controller'=>'文章','action'=>'索引','版主'=>false)
)
);
}
//否则显示版主内容。。。
}

还请查看CakePHP中的自定义错误页;-)

感谢您的回复。我正在寻找一些稍有不同的东西。我希望在错误模式设置为0而不是1或更高时,此功能能够正常工作。在错误模式设置为1或更高时,我已经有了自定义错误处理程序。我想要的是在站点设置为生产模式或0时拦截非404请求在配置文件中。据我所知,设置为零时,您只能触发404个错误,我理解。我只是想知道是否可以截取该错误并显示稍微不同的错误。@digitalbart我不理解您的问题-您可以按照我描述的方式更改布局以及错误消息…我认为您也可以更改在自定义CakeErrorController中设置http响应代码,但不建议这样做,因为“未找到”应始终为404,而常规服务器错误应始终为500。您认为“显示稍微不同的错误”是什么意思?你说的是什么类型的错误或错误消息或错误响应代码?你能在你的问题帖子中添加一个明确的解释结果的例子和更详细的描述吗?如果你在不处于调试模式时有500个错误,那么零级默认布局不会加载错误布局。如果你是,则会加载错误布局在调试模式下,但我不是说这个。因此,我想向用户显示一条友好的错误消息,而不是500错误,因为我们将在生产中。如果不处于调试模式,您将无法访问错误布局,因为这将是关闭的,因此似乎无法捕获此请求。然后,将使用500响应加载默认布局标题中的e。我想在加载默认布局之前捕获它。@digitalbart抱歉,我仍然不明白它…当然,您可以更改布局,对于404和500错误,您甚至可以对不同的错误类型使用不同的布局!还解释了在Ca中自定义布局后,应用程序中的布局是否没有更改keErrorController或直接在错误视图模板中,请添加自定义控制器/视图的代码,可能代码中存在另一个问题,导致出现错误