我正在使用laravel 5.4。我在类中有一个方法来获取模型类的新实例。类的全名是在运行时计算的,因此计算的类名有可能不存在。如果该类不存在,我想忽略任何异常,我想要返回null
。
但是,当发生异常时,Laravel仍然会在下面抛出异常,即使我认为它不应该
[Symfony的\元器件\调试\异常\ FatalThrowableError] Class' 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
来忽略抛出并解决的任何错误?
答案 0 :(得分: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
无法使用短的别名类名。