Доступ к массиву из клиентской библиотеки PHP для Exact Online - PullRequest
0 голосов
/ 20 апреля 2019

Для хранения заказов, размещенных клиентами с определенной информацией из REST API WooCommerce, на панель Exact Online через REST API . Я использовал клиентскую библиотеку PHP для Exact Online .

Хотя возникла проблема - после сохранения данных в Exact Online не удалось получить доступ к определенным полям из массива. В частности, когда был выполнен вызов API REST с

 /api/v1/{division}/bulk/CRM/Accounts?
 $filter=ID eq Email eq'nishanth@gmail.com'&$select=ID,Email

OR

$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 ]

1 голос
/ 22 апреля 2019

Вы можете использовать метод closure bind для доступа к закрытым или защищенным свойствам объекта. Вот пример статической функции.

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");
0 голосов
/ 22 апреля 2019

Чтобы получить доступ к защищенным атрибутам из массива, вы найдете в следующем фрагменте фрагментов

$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');

Но не дали никаких значений, которые привели к пустым значениям

...