嗯,首先,您必须在index.php 中只换行。实际上,如果您有不想显示的异常(例如在生产环境中),这可能会很好。
这里的第二点是你的数据库相关代码应该集中在模型中。所以你可能会引入辅助类,类似于
class SafeQueryHelper{
public static function safeQueryRun(Doctrine_Query $q, array $parameters, $hydration=Doctrine_Core::HYDRATE_RECORD){
try{
return $q->execute($parameters, $hydration);
}
catch(Exception $e){
//Handle yur exceptions here
}
}
}
您只需将所有模型中的$query->execute($params,$hydration) 替换为SafeQueryHelper::safeQueryRun($query,$params,$hydration)。不要忘记使用$this->load->helper('SafeQueryHelper') 或the config 加载它。
对于像 update 和 delete 这样的记录方法 - 您必须将其包装在 try .. catch 中。
好吧,如果您没有将与数据库相关的逻辑集中在模型中...实际上这不会改变任何事情,但这意味着您的应用程序设计不佳,违反了MVC 模式的基本原则,所以开始重构吧。
最后可能的解决方案 - 是侵入 Doctrine 核心类(特别是进入 Doctrine_Connection)并包装到执行实际查询的 try ... catch 行中。但这是个坏主意,我真的不会那样做。
一点更新:由于所有 Doctrine 实体对象都是 Doctine_Record 的子类,您可以使用包装 save、delete 等的方法扩展 SafeQueryHelper:
public static function SafeSave(Doctrine_Record $entity){
try{
$entity->save();
}
catch(Exception $e){
//catch it
}
}
而不是将$entity->save()替换为SafeQueryHelper::SafeSave($entity)