php symfony异常处理/错误处理
作者:互联网
在使用nusoap的symfony应用程序上工作(这是将soap work与php / symfony集成的最佳方法吗?)来进行信用卡付款.
我在下面简化了我的代码示例.
我正在努力的是处理异常的最佳方法.以下示例仅具有1个自定义异常(我的自定义异常应位于symfony的目录结构中的什么位置?(lib / exception?).)但是,当有几种不同类型的异常处理特定错误时会发生什么?具有20个奇数异常的try / catch块不是很优雅.
我也不确定应该在哪里投掷和接住.我需要设置一些用户闪烁以警告用户任何问题,因此我认为捕获应该在动作控制器中完成,而不是在处理soap调用的类中完成.
谁能告诉我可能要去哪里了吗?
我讨厌凌乱的代码/解决方案,并希望尽可能坚持DRY原则.我想我可能还缺少一些内置的symfony功能,这些功能可能对此有所帮助,但是每当我搜索时,我通常会找到适用于symfony 1.2的示例,而我使用的是1.4.
谢谢,有一些例子很好.
lib / soap_payment.class.php
class SoapPayment
{
public function charge()
{
/*assume options are setup correctly for sake of example*/
try
{
$this->call();
}
catch (SoapPaymentClientFaultException $e)
{
/* should this be caught here? */
}
}
private function call()
{
$this->client->call($this->options);
if ($this->client->hasFault())
{
throw new SoapPaymentClientFaultException();
}
}
}
apps / frontend / payment / actions / actions.class.php
class paymentActions extends sfActions
{
public function executeCreate(sfWebRequest $request)
{
/* check form is valid etc */
$soap_payment = new SoapPayment();
try
{
$soap_payment->charge();
}
catch (SoapPaymentClientFaultException $e)
{
/* or throw/catch here? */
$this->getUser()->setFlash('error', ...);
$this->getLogger()->err(...);
}
/* save form regardless, will set a flag to check if successful or not in try/catch block */
}
}
解决方法:
Symfony的一个不太广为人知的功能是,异常可以管理响应中发送的内容.因此,您可以执行以下操作:
class SoapException extends sfException
{
public function printStackTrace() //called by sfFrontWebController when an sfException is thrown
{
$response = sfContext::getInstance()->getResponse();
if (null === $response)
{
$response = new sfWebResponse(sfContext::getInstance()->getEventDispatcher());
sfContext::getInstance()->setResponse($response);
}
$response->setStatusCode(5xx);
$response->setContent('oh noes'); //probably you want a whole template here that prints the message that was a part of the SoapException
}
}
如果您需要对SOAP异常进行更干净的处理(例如设置闪存等),则可能必须捕获每个异常.这里的一个想法可能是创建一个通用的SoapException类,该类由更具体的SoapExceptions扩展,因此您不必捕获许多其他类型.上面的代码也可能是有用的回退机制.
最后,是的,您应该将自定义异常放在lib / exception中.
标签:error-handling,exception-handling,symfony1,php 来源: https://codeday.me/bug/20191209/2097039.html