在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块的只是!
我问,因为捕获异常并抛出另一个异常。对我来说似乎是一种不好的做法。
先谢谢了。
答案 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.
);
}
这可确保您拥有完整的例外链。除此之外,你的方法对我来说很好。