Я получаю эту ошибку, когда пытаюсь просмотреть сообщения об ошибках из API. В документации говорится, что он возвращает массив объектов BatchError в поле PartialError. Когда я пытаюсь получить доступ к свойству Index в BatchError, он выдает ошибку. Что случилось?
https://msdn.microsoft.com/en-us/library/bing-ads-campaign-management-addadgroups.aspx#Anchor_1
PHP Notice – yii\base\ErrorException
Trying to get property of non-object
1. in /cygdrive/c/Users/Chloe/workspace/bestsales/models/BingAds.php at line 384
$response = $campaignProxy->GetService()->AddAdGroups($request);
} catch (\SoapFault $e) {
$this->handleException($e);
return null;
}
$adGroupsIds = $response->AdGroupIds;
$partialErrors = $response->PartialErrors;
foreach ($partialErrors as $batchError) {
Yii::error($batchError);
$adGroup = $adGroups[$batchError->Index]; # <<<<
Журналы:
2016-09-11 22:15:59 [::1][1][v5adqit0fiae7bon3i1lks49m3][error][application] [
unserialize('O:8:"stdClass":8:{s:4:"Code";i:1016;s:7:"Details";N;s:9:"ErrorCode";s:33:"CampaignServiceInvalidEntityState";s:9:"FieldPath";N;s:23:"ForwardCompatibilityMap";N;s:5:"Index";i:0;s:7:"Message";s:104:"Passed entity state is invalid. Please refer to documentation for list of valid values for given entity.";s:4:"Type";s:10:"BatchError";}'),
]
in /cygdrive/c/Users/Chloe/workspace/bestsales/models/BingAds.php:383
in /cygdrive/c/Users/Chloe/workspace/bestsales/models/AdGroup.php:195
in /cygdrive/c/Users/Chloe/workspace/bestsales/models/Keyword.php:145
2016-09-11 22:15:59 [::1][1][v5adqit0fiae7bon3i1lks49m3][error][yii\base\ErrorException:8] exception 'yii\base\ErrorException' with message 'Trying to get property of non-object' in /cygdrive/c/Users/Chloe/workspace/bestsales/models/BingAds.php:384
Я тоже пробовал
Yii::error($batchError);
Yii::error($batchError['Index']);
Yii::error($batchError::$Index);
Yii::error($batchError->$Index);
Yii::error($batchError->Index);
я использовал VarDumper
и получил это:
[
0 => stdClass#1
(
[Code] => 1016
[Details] => null
[ErrorCode] => 'CampaignServiceInvalidEntityState'
[FieldPath] => null
[ForwardCompatibilityMap] => null
[Index] => 0
[Message] => 'Passed entity state is invalid. Please refer to documentation for list of valid values for given entity.'
[Type] => 'BatchError'
)
]
Я смог исправить это с
$partialErrors = $response->PartialErrors;
if (!empty($partialErrors->BatchError)) $partialErrors = $partialErrors->BatchError;
foreach ($partialErrors as $batchError) {
По-видимому foreach
может циклически перебирать свойства объекта, что я знал, что это возможно, и, по-видимому, PartialErrors
это объект с одним свойством с именем BatchError
который затем содержит массив (но BatchError
тоже может вообще не существовать). Это не соответствует документации, или, по крайней мере, не документация наименее неожиданная.
Других решений пока нет …