1

我的一个评论提交表单中有安全组件。现在,当出现问题并调用黑洞回调时,我想抛出带有自定义消息的 InternalErrorException,例如:

 throw new InternalErrorException('You have tried to submit a comment whose security token is either invalid or expired. Please try again by reloading the blog post and commenting again. Thank you.');

问题是消息不会在生产模式下显示(调试 == 0)。我该怎么做才能向用户显示消息而不是“发生内部错误”?

这是我的 error500.ctp:http ://pastebin.com/t9NuzuqS

4

2 回答 2

1

这些“信息”仅用于发展目的。在实时模式(调试 0)中,访问者不应获得您在服务器上获得的任何描述性问题描述。反正他也不会明白。所以在实时模式下,只有一个 404/5xx 被抛出,仅此而已。但是您的消息将被错误记录下来供您(作为开发人员)以后查找。

于 2012-11-23T10:48:32.767 回答
1

您可能会做的是覆盖组件的blackHole操作Security

目前您可以在cakephp\lib\Cake\Controller\Component\SecurityComponent. SecurityComponent您应该在您的文件夹中创建一个Controller\Component并根据需要覆盖此方法:

public function blackHole(Controller $controller, $error = '') {
    if ($this->blackHoleCallback == null) {
        throw new BadRequestException(__d('cake_dev', 'The request has been black-holed'));
    } else {
        return $this->_callback($controller, $this->blackHoleCallback, array($error));
    }
}

您可以使用另一条消息引发相同的异常。debug即使设置为 0 ,用户也会看到此异常,如文档中所述

于 2012-11-23T11:48:46.407 回答