Laravel try catch 不工作,无法从包中捕获异常
Laravel try catch not working, cant catch exception from a package
我正在使用包 https://github.com/barbushin/php-imap 从邮件服务器读取电子邮件,我有以下代码
$folder = Storage::disk('local')->getAdapter()->getPathPrefix();
try {
$mailbox = new \PhpImap\Mailbox('{imap.gmail.com:993/imap/ssl}INBOX', 'xxxxx@gmail.com', 'xxxxxxxxxx', $folder);
}
catch(\Exception $e) {
return 'rroor';
}
但没有捕捉到错误,如果登录失败,我想记录错误。
以下代码抛出异常
if(!$result) {
$errors = imap_errors();
if($errors) {
if($throwExceptionClass) {
throw new $throwExceptionClass("IMAP method imap_$methodShortName() failed with error: " . implode('. ', $errors));
}
else {
return false;
}
}
}
如何在我的控制器方法中捕获此异常?
查看错误页面
试试这个:
use PhpImap\ConnectionException;
//....
$folder = Storage::disk('local')->getAdapter()->getPathPrefix();
try {
$mailbox = new \PhpImap\Mailbox('{imap.gmail.com:993/imap/ssl}INBOX', 'xxxxx@gmail.com', 'xxxxxxxxxx', $folder);
}
catch(ConnectionException $e) {
return 'rroor';
}
或编辑您的 App\Exceptions\Handler;
public function render($request, Exception $exception)
{
if ($exception instanceof \PhpImap\ConnectionException\ConnectionException) {
//add log
return 'error';
}
return parent::render($request, $exception);
}
try {
$folder = Storage::disk('local')->getAdapter()->getPathPrefix();
$mailbox = new \PhpImap\Mailbox('{imap.gmail.com:993/imap/ssl}INBOX',
'xxxxx@gmail.com', 'xxxxxxxxxx', $folder);
}
catch(\Throwable $e) {
return 'error';
}
您在 try...catch 中只有 class 构造函数。我查看了回购协议,它似乎没有从构造函数中抛出该异常。 https://github.com/barbushin/php-imap/blob/master/src/PhpImap/Mailbox.php#L33
您的代码中是否还有更多可能调用这部分代码的内容 https://github.com/barbushin/php-imap/blob/master/src/PhpImap/Mailbox.php#L148?
我认为您需要将更多代码包装到示例中缺少的 try...catch 中。
我正在使用包 https://github.com/barbushin/php-imap 从邮件服务器读取电子邮件,我有以下代码
$folder = Storage::disk('local')->getAdapter()->getPathPrefix();
try {
$mailbox = new \PhpImap\Mailbox('{imap.gmail.com:993/imap/ssl}INBOX', 'xxxxx@gmail.com', 'xxxxxxxxxx', $folder);
}
catch(\Exception $e) {
return 'rroor';
}
但没有捕捉到错误,如果登录失败,我想记录错误。
以下代码抛出异常
if(!$result) {
$errors = imap_errors();
if($errors) {
if($throwExceptionClass) {
throw new $throwExceptionClass("IMAP method imap_$methodShortName() failed with error: " . implode('. ', $errors));
}
else {
return false;
}
}
}
如何在我的控制器方法中捕获此异常?
查看错误页面
试试这个:
use PhpImap\ConnectionException;
//....
$folder = Storage::disk('local')->getAdapter()->getPathPrefix();
try {
$mailbox = new \PhpImap\Mailbox('{imap.gmail.com:993/imap/ssl}INBOX', 'xxxxx@gmail.com', 'xxxxxxxxxx', $folder);
}
catch(ConnectionException $e) {
return 'rroor';
}
或编辑您的 App\Exceptions\Handler;
public function render($request, Exception $exception)
{
if ($exception instanceof \PhpImap\ConnectionException\ConnectionException) {
//add log
return 'error';
}
return parent::render($request, $exception);
}
try {
$folder = Storage::disk('local')->getAdapter()->getPathPrefix();
$mailbox = new \PhpImap\Mailbox('{imap.gmail.com:993/imap/ssl}INBOX',
'xxxxx@gmail.com', 'xxxxxxxxxx', $folder);
}
catch(\Throwable $e) {
return 'error';
}
您在 try...catch 中只有 class 构造函数。我查看了回购协议,它似乎没有从构造函数中抛出该异常。 https://github.com/barbushin/php-imap/blob/master/src/PhpImap/Mailbox.php#L33
您的代码中是否还有更多可能调用这部分代码的内容 https://github.com/barbushin/php-imap/blob/master/src/PhpImap/Mailbox.php#L148?
我认为您需要将更多代码包装到示例中缺少的 try...catch 中。