Я использую 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
?
Я думаю, что лучший способ — предотвратить исключение, а не скрывать его. Поэтому перед созданием нового экземпляра класса проверьте, существует ли он:
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
не будет работать с использованием короткого псевдонима класса.
Других решений пока нет …