当我尝试捕捉时,Laravel正在抛出异常事件

时间:2017-05-07 21:45:39

标签: php laravel exception exception-handling laravel-5.4

我正在使用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来忽略抛出并解决的任何错误?

1 个答案:

答案 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无法使用短的别名类名。