我有一个try-catch块的查询。我要创建对象,如果失败,它将抛出错误消息或在其他页面上重定向。
代码
function __construct() {
try{
$this->ServiceObj = AnyClass::getService('XXX');
}
catch{
return Redirect::to('/');
}
}
public function MyOwnFunction() {
$getValueofCode = $this->_ServiceObj->set($endPoint_Url); //it's only example method not want to set anything
}
这是在构造函数中定义和使用try catch块的正确方法吗?我可以使用试试看吗?抓住建筑?如果否,那么有更好的方法来实现这一目标吗?
提前致谢!!!
答案 0 :(得分:1)
你绝对可以在构造函数中使用try catch,只是不要忘记指定要捕获的异常类,如catch (\Exception $e)
。但是Laravel不会处理返回的重定向。 (根据定义,构造函数不应该返回某些东西)
一个简单的解决方法是在重定向上调用send()
。这将立即将其返回给客户端并停止应用程序。
try{
$this->ServiceObj = AnyClass::getService('XXX');
}
catch(\Exception $e){
Redirect::to('/')->send();
}
但是,既然您提到了登录页面,那么最好使用before filter来检查和重定向。就像内置的auth
过滤器一样。
第三种解决方案是App::error
。在app/start/global.php
,您可以执行以下操作:
App::error(function(FooBarException $exception)
{
return Redirect::to('/');
});
当然,这只有在您的异常足够具体时才有效(将FooBarException
替换为您要捕获的异常)