抓住另外一个例外......还有其他方法吗?

时间:2014-11-20 17:06:13

标签: php exception laravel

在Laravel框架中,每当您尝试从您的雄辩模型中获取某些数据时,如果发生异常,它将抛出ModelNotFoundException。在我的项目中,我需要捕获此异常并将用户重定向到特定路由。

我结束的解决方案是这样的:

try{
        $foundUser = $this->user->whereId($id)->firstOrFail();
    }catch(ModelNotFoundException $e){
        throw new NonExistantUserException;
    }

我知道我可以将我的重定向代码放在catch块中,但是我已经在global.php中捕获了这些异常:

App::error(function(NonExistantUserException $e)
{
    return Redirect::back()->WithInput();
});

我想知道有什么方法可以说,例如无论在try块内发生什么样的异常我想把它抓住 as {{1这个try块的只是

我问,因为捕获异常并抛出另一个异常。对我来说似乎是一种不好的做法。

先谢谢了。

1 个答案:

答案 0 :(得分:1)

绝对不差的做法甚至是普通的做法。但是,您不应该简单地丢弃先前的异常,因为它可能对调试有用。

<?php

try {
    $foundUser = $this->user->whereId($id)->firstOrFail();
} catch (ModelNotFoundException $e) {
    throw new NonExistentUserException(
        "Could not find user for '{$id}'.",
        null,
        $e // Keep previous exception.
    );
}

这可确保您拥有完整的例外链。除此之外,你的方法对我来说很好。