Добрый день.
Как правильно обрабатывать исключения, например \SoapFault, чтобы работа приложения продолжила работать как будто ничего не произошло?
Я так понимаю сейчас в методе yii\base\ErrorHandler::register() ставятся обработчики ошибок, что и приводит к нежелательным результатам.
В качестве костыля я нашёл такое решение, причём работает только для контроллера наследника \yii\web\Controller, для yii\console\Controller исключения не удалось предотвратить вообще никак. В общем мне это совсем не нравится, что-то я упускаю совсем очевидное.
try {
Yii::$app->errorHandler->unregister();
$this->_soapClient = new \SoapClient($this->wsdl,
array(
'trace' => 1,
'exceptions' => 1,
'encoding' => 'UTF-8',
'passphrase' => ''
)
);
}
catch(\SoapFault $e) {
Yii::$app->errorHandler->exception->type = null;
Yii::$app->errorHandler->register();
}
Как вариант я вижу, детально продебажить работу этого компонента, наследовать его и придумать свой выход из ситуации, но я уверен что такая типовая задача должна решаться как-то намного проще и изящней. Да и нужно это в 1м поведении, а не во всём приложении.