у меня есть этот код:Как использовать переменную из Ьгу блока в блок поймать
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 в базе данных, если вызвано исключение?
Вы можете на самом деле сделать это в php, переменная '$ apiBody' по-прежнему доступна в блоке' catch', но если вы хотите сделать ее правильно по областям, просто определите переменную '$ apiBody' до (за пределами) блок 'try'. –