在php构造函数中实现try/catch块

在php构造函数中实现try/catch块,php,laravel-4,try-catch,Php,Laravel 4,Try Catch,我有一个带有try-catch块的查询。我将创建一个对象,如果它失败,它将抛出错误消息或在其他页面上说重定向 代码 function __construct() { try{ $this->ServiceObj = AnyClass::getService('XXX'); } catch{ return Redirect::to('/'); } } public

我有一个带有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块的正确方法吗?我可以在施工中使用试块和抓块吗?如果没有那么有没有更好的方法来实现这一点


提前感谢

您肯定可以在构造函数中使用try-catch,但不要忘记指定要捕获的异常类,如
catch(\exception$e)
。但是,Laravel不会处理返回的重定向。(根据定义,构造函数甚至不应该返回某些内容)

一个简单的解决方法是在重定向上调用
send()
。这将立即将其返回到客户端并停止应用程序

try{ 
    $this->ServiceObj = AnyClass::getService('XXX');
}
catch(\Exception $e){
    Redirect::to('/')->send();
}
但是,既然您提到了登录页面,那么您最好使用检查和重定向。就像内置的
auth
过滤器一样

第三个解决办法是。在
app/start/global.php
中,您可以执行以下操作:

App::error(function(FooBarException $exception)
{
    return Redirect::to('/');
});

当然,这只有在异常足够具体的情况下才有效(将
FooBarException
替换为要捕获的异常)

当然可以。不过,您可能希望更全面地处理错误:@lukasgeiter,谢谢,但我想知道我也可以重定向吗?事实上,我正在使用API,如果有人可以直接点击结果页面,我需要将他重定向到主页,他需要使用谷歌登录。啊,现在我明白了。。。我会在一封信里写一个答案minute@lukasgeiter..waiting谢谢你的回答。:)