Yii2 - 致命错误,try-catch无法正常工作

时间:2016-06-17 16:01:55

标签: php yii2 try-catch

我想在yii2项目中使用SoapClient。但我需要使用try-catch管理错误。但那不起作用!

yii2代码示例:

class SiteController extends Controller
{
    public function actionIndex()
    {
        try{
            new \SoapClient('a',['cache_wsdl' =>  WSDL_CACHE_MEMORY]);
        }catch(\SoapFault $e){
            echo '***************';
        }
    }
}

yii框架输出:

  

PHP致命错误 - yii \ base \ ErrorException SOAP-ERROR:解析WSDL:   无法从'a'加载:无法加载外部实体“a”

但是在test.php(没有yii框架)中:

try{
    new SoapClient('a',['cache_wsdl' =>  WSDL_CACHE_MEMORY]);
}catch(SoapFault $e){
    echo '***************';
}

输出

***************

为什么抓住SoapFault无法正常工作? 但是在单个php脚本中工作和打印的星星。

2 个答案:

答案 0 :(得分:1)

当我在谷歌上搜索同样的问题时帮助我的解决方案:

try {
    $wsdl = 'http://test.com/test/ws/Landing/?wsdl';
    simplexml_load_file($wsdl);
    $short_link = new \SoapClient($wsdl, $options);
} catch (\Throwable $e) {
    var_dump($e);
}

来源:https://github.com/yiisoft/yii2/issues/11772#issuecomment-413887276


如果需要进行授权,可以使用 curl

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERPWD, "{$login}:{$password}");
curl_setopt($ch, CURLOPT_SSLCERT, $cert_path);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type: text/xml; charset=utf-8"]);
$result = curl_exec($ch);
curl_close($ch);

答案 1 :(得分:-1)

你应该添加

define('YII_ENABLE_ERROR_HANDLER', false);

它对我有用