yii2 — PHP: попытка получить свойство необъекта из объекта BatchError API Bing Ads

Я получаю эту ошибку, когда пытаюсь просмотреть сообщения об ошибках из 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'
)
]

1

Решение

Я смог исправить это с

$partialErrors = $response->PartialErrors;
if (!empty($partialErrors->BatchError)) $partialErrors = $partialErrors->BatchError;
foreach ($partialErrors as $batchError) {

По-видимому foreach может циклически перебирать свойства объекта, что я знал, что это возможно, и, по-видимому, PartialErrors это объект с одним свойством с именем BatchError который затем содержит массив (но BatchError тоже может вообще не существовать). Это не соответствует документации, или, по крайней мере, не документация наименее неожиданная.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector