2015-11-17 2 views
0

у меня есть этот код:Как использовать переменную из Ьгу блока в блок поймать

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 говорит мне, что $apiBody в блоке улова не определен, а также в базе данных она хранится в качестве значения null.

Я не понимаю, почему ... Я никогда не сталкивался с такой ситуацией, но я думаю, что переменная определена.

Что мне не хватает? Как я могу сохранить тело ответа API в базе данных, если вызвано исключение?

+0

Вы можете на самом деле сделать это в php, переменная '$ apiBody' по-прежнему доступна в блоке' catch', но если вы хотите сделать ее правильно по областям, просто определите переменную '$ apiBody' до (за пределами) блок 'try'. –

ответ

2

Исключение было брошено где-то в $this->api->get('Info')->getBody(). Он даже не получил, чтобы вернуть значение, а тем более, чтобы присвоить это значение $apiBody. Переменная действительно не определена, поскольку в процессе ее определения было выбрано исключение.

Смежные вопросы