【问题标题】:Where to catch exceptions in a MVC framework在 MVC 框架中捕获异常的位置
【发布时间】:2015-10-28 08:07:14
【问题描述】:

每个人都在谈论异常处理的重要性。直到最近我才需要处理它们:

try { 
    $pdo = new PDO($dns); 
} catch (Exception $e) {
    throw new Exception($e); 
} 

另一个更一般的例子是:

if ($something) {
    throw new Exception('Ouch! I can't do that!');
}

经过一些在线研究,我发现网上的许多示例/解决方案只是简单地呼应了它们。 (PDO Exception Questions - How to Catch Them) 有些没有解决方案。 (Catching PDOException in lower layer and re-throwing as different exception to upper layer) & (Where to catch exception in PHP MVC application?) 还有其他的,我就是不明白。 (Where to catch exceptions)

问题#1:我应该在哪里捕获异常;在 MVCish 框架的模型或控制器中?

问题 #2: 捕获它应该怎么做?记录、发送电子邮件、显示 503?

【问题讨论】:

  • 这是处理 PDO 所以它的数据库,那些异常应该在模型层处理。
  • 您必须在可以处理的地方捕获它...如果“PDO”出现错误,您是否可以立即处理(即重试或忽略它),或者确实它使应用程序崩溃? (所以你必须在更高的层次上重新抛出它......)
  • 这是你的 MVC,你可以随心所欲。我肯定会记录它,并显示错误消息。
  • @CodeGodie 那么如果 PDO 连接丢失,我应该在模型中记录/显示 503 吗?这与我读过的很多内容背道而驰。

标签: java php .net pdo frameworks


【解决方案1】:

我是一个 .net 人,对我来说捕获异常的最佳实践:

  • 尽可能晚地赶上它。
  • 编写一个通用代码来捕获异常。
  • 在控制器级别捕获它并将其记录在具有完整堆栈跟踪(ETW、日志文件、数据库等)的某个位置。
  • 将用户重定向到一些好看的错误页面。只有控制器才能做到这一点。

【讨论】:

  • 你想让我抓住我的控制器?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-27
  • 2011-06-05
  • 1970-01-01
  • 2018-07-23
  • 1970-01-01
  • 1970-01-01
  • 2019-03-05
相关资源
最近更新 更多