Доступ к массиву из клиентской библиотеки PHP для Exact Online
Чтобы хранить заказы, размещенные клиентами с определенной информацией из REST API WooCommerce, на панель Exact Online через REST API. Я использовал клиентскую библиотеку PHP для Exact Online.
Хотя была проблема - после сохранения данных в Exact Online не удалось получить доступ к определенным полям из массива. В частности, когда вызов REST API был сделан с
/api/v1/{division}/bulk/CRM/Accounts?
$filter=ID eq Email eq'nishanth@gmail.com'&$select=ID,Email
ИЛИ ЖЕ
$url = "https://start.exactonline.de/api/v1/" + mandant.number + "/crm/Accounts?
$filter=Email eq '" + orderitem.email + "'&$select=ID,Code";
Здесь вы будете ниже код
$customer = [
'address' => 'No.22/N, 91 Cross, XYZ Street, ABC Road',
'address2' => 'DEF',
'city' => 'GHI',
'customerid' => '999',
'country' => 'DE',
'name' => 'Nishanth',
'zipcode' => '123456'
];
// Create a new account
$account->AddressLine1 = $customer['address'];
$account->AddressLine2 = $customer['address2'];
$account->City = $customer['city'];
$account->Code = $customer['customerid'];
$account->Country = $customer['country'];
$account->IsSales = 'true';
$account->Name = $customer['name'];
$account->Postcode = $customer['zipcode'];
$account->Email = 'nishanth@gmail.com';
$account->Status = 'C';
$account->save();
Это был результат, полученный после фильтрации по Email ID
echo '<pre>'; print_r($account->filter("Email eq 'nishanth@gmail.com'"));
[attributes:protected] => Array
(
[Accountant] =>
[AddressLine1] => No.22/N, 91 Cross, XYZ Street, ABC Road
[AddressLine2] => DEF
[City] => GHI
[Code] => 1000
[ConsolidationScenario] => 6
[Country] => DE
[CountryName] => Germany
[Created] => /Date(1555764341137)/
[Creator] => 5bbfbd93-52f1-4f4b-b34e-fd213e479f8e
[CreatorFullName] => Nishanth
[Division] => 54810
[Email] => nishanth@gmail.com
[ID] => bb124287-647c-4267-bd60-004efa1302aa
[LogoThumbnailUrl] => https://start.exactonline.de//docs/images/placeholder_account_myeol.png
[LogoUrl] => https://start.exactonline.de//docs/images/placeholder_account_myeol.png
[Modified] => /Date(1555764341137)/
[Modifier] => 5bbfbd93-52f1-4f4b-b34e-fd213e479f8e
[ModifierFullName] => Nishanth
[Name] => Nishanth Jay
[Postcode] => 123456
)
Использование ниже встроенных функций, таких как,
public function find()
{
$result = $this->connection()->get($this->url);
return new self($this->connection(), $result);
}
public function findWithSelect($select = '')
{
$result = $this->connection()->get($this->url, [
'$select' => $select
]);
return new self($this->connection(), $result);
}
Несмотря на вызов со встроенными функциями ниже:
$Accounts->filter("Email eq 'nishanth@gmail.com'")[0]->findWithSelect('ID');
$checkAccount = $Accounts->filter("Email eq 'nishanth@gmail.com'");
$checkAccount[0]->find('ID');
$checkAccount[0]->findWithSelect('Code');
Выше встроенная библиотека привела к
[attributes:protected] => Array
(
)
Как мне нужно получить доступ к определенным атрибутам из массива?
Аналогично, получение CurrentDivision
из библиотеки было легко с помощью звонков, таких как $getCurrentDivision->findWithSelect('CurrentDivision');
или с $getDivision->CurrentDivision;
Почему та же функция не может работать после получения массива?
2 ответа
Вы можете использовать метод привязки закрытия для доступа к закрытым или защищенным свойствам объекта. Вот пример статической функции.
class Helper {
/**
* Helper method to access private
* or protected properties of an object
* using the closure bind method
*/
public static function accessPrivate($object, $property) {
$bind = Closure::bind(
function($prop) {
return $this->$prop;
},
$object,
$object
);
return $bind($property);
}
}
Useage:
$code = Helper::accessPrivate($checkAccount, "Code");
Чтобы получить доступ к защищенным атрибутам из массива, вы найдете в следующем фрагменте фрагментов
$checkAccount = $Accounts->filter("Email eq 'nishanth@gmail.com'");
$getAccountId = $checkAccount[0]->ID;
$getAccountCode = $checkAccount[0]->Code;
Так как я пытался с findWithSelect()
а также find()
:
$Accounts->filter("Email eq 'nishanth@gmail.com'")[0]->findWithSelect('ID');
Но не дали никаких значений, которые привели к пустым значениям