2010-04-28 117 views
4

我们正在构建一个基于Good old codeigniter框架的PHP应用程序,并且遇到了由多个模型调用组成的大规模链接操作问题,这些操作一起是数据库大事务的一部分。在PHP中处理错误

我们希望能够做一个动作列表,并从函数返回每个动作的状态报告,无论结果如何。

我们的第一个初步想法是利用PHP5的异常,但由于我们还需要不破坏脚本执行的状态消息,这是我们提出的解决方案。

它去有点像这样:

$sku = $this->addSku($name); 

if ($sku === false) { 
    $status[] = 'Something gone terrible wrong'; 
    $this->db->trans_rollback(); 
    return $status; 
} 

$image= $this->addImage($filename); 

if ($image=== false) { 
    $error[] = 'Image could not be uploaded, check filesize'; 
    $this->db->trans_rollback(); 
    return $status; 
} 

我们的控制器是这样的:

$var = $this->products->addProductGroup($array); 

if (is_array($var)) { 

    foreach ($var as $error) { 
     echo $error . '<br />'; 
    } 

} 

这似乎是一个非常脆弱的解决方案做我们所需要的,但它没有可扩展性例如,与纯粹的PHP例外情况相比,这两种方法都不起作用

这真的是这种东西通常在基于MVC的应用程序中处理的方式吗?

谢谢!

更新: 已经做了一个公平的谷歌搜索,发现这个PHP函数:register_shutdown_function。 难道这就是我们正在寻找的?我不知道,不能得到它的工作,我们希望它... 参考方式:http://php.net/manual/de/function.register-shutdown-function.php

+0

Original post updated。 – Industrial 2010-04-30 11:11:32

回答

2

您可以在PHP自定义异常处理程序 - http://php.net/manual/en/function.set-exception-handler.php

这将允许脚本继续执行。 YOu可以创建一个将状态记录到数据库中的函数。另一个功能和/或类可以获取这些更新当前状态报告。如果你抛出一个自定义的豁免ie.throw StatusException,你的自定义处理程序可以选择异常类型,并对其他标准异常执行默认操作时进行适当的日志记录...

也可以使用数据库处理程序将信息存储到会话对象中,以便稍后在当前会话中引用。

如果使用异常处理程序是正确的事情,我仍然不确定,因为我仍然对你想要做的事情有点模糊,但是我的方法将允许代码执行在处理异常时继续。

+0

这真的很有趣。我正在阅读它,并试图了解它是如何工作的,以及我们是否可以从中受益。使用更接近于纯粹的PHP例外的东西肯定会比例子中显示的更清晰的代码... – Industrial 2010-04-28 21:41:31

+0

再次嗨!尝试了自定义异常处理程序,但我无法让它停止。以下是PHP.net所说的:“执行将在exception_handler后停止”。你是怎么做到的? – Industrial 2010-04-30 11:09:56