2014-11-20 64 views
0

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

,我已经结束了解决的办法是这样的:

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

我知道,我可以把我的重定向代码的catch块,但我已经抓住这些种类在全球例外。 PHP:

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

我想知道有没有办法说,例如无论try块内会发生什么样的异常我想捕获它NonExistantUserException只是这个尝试块!

我在问,因为捕捉异常抛出另一个。对我来说似乎是一个不好的习惯

谢谢先进。

+0

这不一定是坏习惯。将一个异常转换为另一个异常(通过捕捉异常)是一件非常有趣的事情。 – deceze 2014-11-20 17:12:38

+0

谢谢@deceze。 – 2014-11-20 20:41:50

回答

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. 
    ); 
} 

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

+0

谢谢@fleshgrinder ..我知道第一个参数是消息,但是,第二个参数呢? – 2014-11-20 20:45:10

+0

这是异常代码。您可以使用它来清楚地识别异常。如果一个方法可能会多次抛出相同的异常,并且只想捕获一个特定的情况,这将特别有用。 'try {} catch(\ Exception $ e){if($ e-> getCode()=== 42){/ *做某事* /} else {throw $ e}}' – Fleshgrinder 2014-11-20 21:00:17

+1

Thanks @Fleshgrinder .. now this异常事情对我来说更有意义 – 2014-11-20 22:49:32

相关问题