在 php 构造函数中实现 try/catch 块
Implementing a try/catch block in php constructor function
我有一个带有 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 块吗?如果 NO 有没有更好的方法来实现这个目标?
提前致谢!!!
您绝对可以在构造函数中使用 try catch,只是不要忘记像 catch (\Exception $e)
一样指定要捕获的异常 class。但是 Laravel 不会处理 returned 重定向。 (根据定义构造函数甚至不应该 return 东西)
一个简单的解决方法是在重定向时调用 send()
。这将 return 立即发送给客户端并停止应用程序。
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
替换为您想要捕获的异常)
我有一个带有 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 块吗?如果 NO 有没有更好的方法来实现这个目标?
提前致谢!!!
您绝对可以在构造函数中使用 try catch,只是不要忘记像 catch (\Exception $e)
一样指定要捕获的异常 class。但是 Laravel 不会处理 returned 重定向。 (根据定义构造函数甚至不应该 return 东西)
一个简单的解决方法是在重定向时调用 send()
。这将 return 立即发送给客户端并停止应用程序。
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
替换为您想要捕获的异常)