CakePHP 2.0 - 自定义数据库错误消息

时间:2012-01-05 20:38:49

标签: database cakephp error-handling cakephp-2.0

我有一个带有MySQL数据库的CakePHP 2.0应用程序。两个数据库表以1:n关系和外键约束连接。 因此,如果我想删除在其他数据库表中连接的条目,我会收到错误:

Error: SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a forein key constraint fails (...)
SQL Query: DELETE 'Test' FROM 'tests' AS 'Test' WHERE 'Test'.'id' = 10

Notice: If you want to customize this error message, create app/View/Errors/pdo_error.ctp

但我想要做的是处理错误信息!我读了一些关于'onError'的内容,但是把它放到'AppModel'中似乎没有被调用(也许它只适用于CakePHP 1.3?):

class Test extends AppModel {
     function onError() {
         echo "TESTTESTTEST";
         $db = ConnectionManager::getDataSource('default');
         $err = $db->lastError();
         $this->log($err);
         $this->log($this->data);
     }
}

那我该怎么办?我想留在这个页面上,我想只显示一条错误信息(不是堆栈跟踪和这种东西)。

有人有想法吗?

2 个答案:

答案 0 :(得分:1)

使用.ctp怎么样?

如果要自定义此错误消息,请创建app / View / Errors / pdo_error.ctp

正在使用的那个是在Cake目录中,您可以将其复制到您的app / View / Errors目录,并根据需要从中删除堆栈跟踪。

还可以使用beforeDelete()模型回调函数来设置flashMessage。

答案 1 :(得分:0)

数据库错误通常会给出500错误,因此cakephp通过使用处理500异常 仅查看/错误/ error500.ctp或app / View / Errors / pdo_error.ctp并自定义此页面

并在AppController.php中添加此函数

 function beforeRender() {
    if($this->name == 'CakeError') {
        $this->set('title','Internal error occurs');
        $this->layout = 'frontend';
    }
    }