在主脚本中处理自定义异常



在此示例中,我使用的是mailgun库。他们提供了5种不同的例外。

我的问题是,这是如何在我的主要脚本中处理的?我希望能够捕获所有这些内容和错误日志,但是每次使用Mailgun时都必须单独捕获所有5个。

我的想法是带每个人并提出标准例外,但我不确定这是否正确吗?

public function sendMailPs($to, $from, $subject, $msgHtml, $msgTxt){
    $mg = Mailgun::create($this->config->key);
    try{
        $res = $mg->messages()->send('domain.com', [
            'from'    => $from,
            'to'      => $to,
            'subject' => $subject,
            'text'=> $msgTxt,
            'html'    => $msgHtml
        ]);
    } catch (HttpClientException $e){
        throw new Exception($e->getMessage(), $e->getCode());
    } catch (HttpServerException $e){
        throw new Exception($e->getMessage(), $e->getCode());
    } catch (HydrationException $e){
        throw new Exception($e->getMessage(), $e->getCode());
    } catch (InvalidArgumentException $e){
        throw new Exception($e->getMessage(), $e->getCode());
    } catch (UnknownErrorException $e){
        throw new Exception($e->getMessage(), $e->getCode());
    }
}

1)您可以通过捕获RuntimeException减少重复,因为当异常扩展了父级。

final class HydrationException extends RuntimeException implements Exception

2)您可以使用一个案例语句作为您感兴趣的例外情况,默认一个您不是。

try
{
   // Code here
}
catch( Exception $e )
{
  switch( get_class( $e ) )
  {
    case 'HttpClientException':
    case 'HydrationException':
    case 'UnknownErrorException':
      throw new Exception($e->getMessage(), $e->getCode());
  }
  throw $e;
}
public function sendMailPs($to, $from, $subject, $msgHtml, $msgTxt) {
    $mg = Mailgun::create($this->config->key);
    try{
        $res = $mg->messages()->send('domain.com', [
            'from'    => $from,
            'to'      => $to,
            'subject' => $subject,
            'text'=> $msgTxt,
            'html'    => $msgHtml
        ]);
    } catch (MailgunException $e){
        throw new MailgunException($e->getMessage(), $e->getCode());
    }
}

您可能会失去HTTPClientException的其他$响应。因此,您要清理。或仅在上述功能外使用 mailgun 异常。

最新更新