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

时间:2015-04-24 18:21:38

标签: php laravel-4 try-catch

我有一个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块的正确方法吗?我可以使用试试看吗?抓住建筑?如果,那么有更好的方法来实现这一目标吗?

提前致谢!!!

1 个答案:

答案 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替换为您要捕获的异常)