我有一个带有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);
}
}
那我该怎么办?我想留在这个页面上,我想只显示一条错误信息(不是堆栈跟踪和这种东西)。
有人有想法吗?
答案 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';
}
}