【问题标题】:Cakephp 3 Can't catch FatalErrorExceptionCakephp 3 无法捕获 FatalErrorException
【发布时间】:2015-10-30 17:59:00
【问题描述】:

我在组件内部有一个功能,可以使用 Gmail 发送联系邮件。无论出于何种原因,如果我使用手机互联网,我的工作网络会阻止与 Gmail 的安全连接,例如它工作正常,因此很明显电子邮件配置很好。我真正感兴趣的是捕获 FatalErrorException,这样我就可以向控制器返回 false 并在网站上显示错误消息,但我没有这样做。

这是我的组件代码:

try{
  $correo = new Email();
  $correo
    ->transport('mail')              
    ->template('contacto_negocio')
    ->emailFormat('html')
    ->to($correoPara)
    ->from($correoDe, $nombreDe)
    ->replyTo($correoDe, $nombreDe)
    ->subject(__('Mensaje de contacto desde ').$sitio_nombre_secundario)
    ->viewVars([
      'sitio_nombre_secundario'=>$sitio_nombre_secundario,          
      'sitio_nombre' => $sitio_nombre,
      'nombreDe'=>$nombreDe,
      'correoDe'=>$correoDe,
      'mensaje'=>$mensaje
    ])        
    ->send();

} catch (FatalErrorException $ex){  
  return false;

} catch(SocketException $ex){   
  return false;

}catch (\Exception $ex) {
  return false;
} 

以及控制器中的代码:

if($this->Correo->contactoNegocio($correo, $nombreDe, $correoDe, $mensaje)){
  $respuesta = ['cod'=>1, 'mensaje'=>'Message sent'];                
}else{
  $respuesta = ['cod'=>0, 'mensaje'=>'<span style="color:red; font-size: 12px;">Message not sent.<span>'];
}

我错过了什么??

【问题讨论】:

  • 您的代码没有达到它可以捕获FatalErrorException 的程度,因为执行时间错误或多或少是蛋糕自行处理的关闭函数的结果。据我所知,您可以增加限制或尝试修改他们的关闭方法,但您将无法将其“捕获”为异常。
  • 该错误表明您的脚本正在超时。就@skrilled 而言,它永远不会到达catch 块,因为在此之前它已经停止执行。
  • 你们说的都对,我看不出来。我将 max_execution_time 设置为 60 秒,并将 configTransport 的超时设置为 30 秒,这解决了我的问题。谢谢两位的回复。
  • @skrilled 请将您的评论变成答案,这样这个问题就不会再出现在“未回答”列表中。
  • @InigoFlores 完成 :)

标签: php cakephp cakephp-3.0


【解决方案1】:

您的代码没有达到可以捕获FatalErrorException 的程度,因为执行时间错误或多或少是 cake 自行处理的关闭函数的结果。

您可以增加限制或尝试修改其关闭方法,但您将无法将其“捕获”为异常,因为它会在 catch 块之前停止执行。

【讨论】:

    猜你喜欢
    • 2015-04-09
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 2016-11-05
    • 1970-01-01
    • 2017-07-05
    相关资源
    最近更新 更多