如何将try块中的变量用于catch块

时间:2015-11-17 10:45:25

标签: php try-catch undefined

我有这段代码:

    try {
        // Get a response from an API
        $apiBody = $this->api->get('Info')
            ->getBody();
    } catch (\Exception $e) {
        if ($e instanceof ConnectException) {
            // Set a flash error message
            $this->session->getFlashBag()->add('danger', 'Errore durante l\'importazione. URL non valido.');
            $wrongUrlNotification = new Notification();
            $wrongUrlNotification->setForUser($user)
                ->setMessage('Errore durante l\'importazione. URL non valido.');
            $this->em->persist($wrongUrlNotification);
        } else {
            // Set a flash error message
            $message = 'Errore durante l\'importazione. Il messaggio restituito dal sistema è il seguente: ' . $e->getMessage() . ' [CODICE: ' . $e->getCode() . ']';
            $this->session->getFlashBag()->add('danger', $message);
            $exceptionNotification = new Notification();
            $exceptionNotification->setForUser($user)
                ->setCreatedOn(new \DateTime())
                ->setCode(0)
                ->setMessage($message)
                ->setDebug($apiBody);
            $this->em->persist($exceptionNotification);
        }
    }

问题在于变量$apiBody

如您所见,我在try块中给它一个值。如果抛出异常,我想在数据库中存储API返回的字符串,以便稍后调试它,并了解导致错误的原因。

问题是PHPStorm告诉我,catch块中的$apiBody没有被定义,并且在数据库中它也被存储为null值。

我不明白为什么......我从未处理过这种情况,但我认为变量是定义的。

我错过了什么?如果触发异常,如何将API的响应正文存储在数据库中?

1 个答案:

答案 0 :(得分:2)

$this->api->get('Info')->getBody()的某处抛出了异常。它甚至没有返回一个值,更不用说将该值赋给$apiBody了。确实没有定义变量 ,因为在定义变量的过程中抛出了异常。