Laravel создает исключение, когда я пытаюсь поймать

Я использую Laravel 5.4. У меня есть метод в классе, который получает новый экземпляр класса модели. Полное имя класса вычисляется во время выполнения, поэтому существует вероятность, что вычисленное имя класса не существует. В случае, если класс не существует, я хочу игнорировать любое исключение и хочу вернуть null вместо.

Но, когда происходит исключение, Laravel по-прежнему выбрасывает исключение, даже если я думаю, что это не должно

[Symfony \ Component \ Debug \ Exception \ FatalThrowableError] Класс ‘App \ Models \ CreatedBy’ не найден

Обратите внимание, что строка App\Models\CreatedBy был вычислен во время выполнения.

Вот мой код

private function getForeignModelInstance()
{
try {
if (!$this->foreignModel) {
$model = $this->getFullForeignModel();

if ($model) {
$this->foreignModel = new $model();
}
}

return $this->foreignModel;
} catch (\Exception $e) {
return null;
}
}

Как можно игнорировать любую выданную ошибку и решить, вернув null?

1

Решение

Я думаю, что лучший способ — предотвратить исключение, а не скрывать его. Поэтому перед созданием нового экземпляра класса проверьте, существует ли он:

private function getForeignModelInstance()
{
try {
if (!$this->foreignModel) {
$model = $this->getFullForeignModel();

if ($model && class_exists($model)) {
$this->foreignModel = new $model();
}

return null;
}

return $this->foreignModel;
} catch (\Exception $e) {
return null;
}
}

Замечания: class_exists не будет работать с использованием короткого псевдонима класса.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector