Как программно сохранить значение пользовательского атрибута клиента в Magento2?


Я настроил пользовательский атрибут в соответствии с этим сообщением . Однако я создал плагин типа <type name="Magento\Customer\Api\CustomerRepositoryInterface">, чтобы сохранить свой атрибут example custom_attribute. Мой плагин выглядит так:

public function aroundSave(CustomerRepository $customerRepository, \Closure $proceed, CustomerInterface $customer)
{
    $customer->setCustomAttribute('example', 'a hardcoded value');
    return $proceed($customer);
}

Проблема, с которой я сталкиваюсь, заключается в том, что он действительно сохраняет атрибут custom_attribute, но созданный клиент не может войти в систему, так как пароль не сохранен в бд. Кроме того, для создания такого клиента требуется больше, чем обычно, поэтому я подозреваю, что происходит бесконечный цикл.

 1
Author: awavi, 2016-01-09

1 answers

Лучше всего назвать ваш первый параметр $subject для плагина around и $продолжить для вашего второго параметра. Похоже, что вы ничего не делаете после вызова функции продолжить(), так что на самом деле вам следует использовать плагин before. Поэтому, чтобы сделать то, что вам нужно, ваш плагин должен выглядеть следующим образом:

public function beforeSave(CustomerRepository $subject, CustomerInterface $customer)
{
    $customer->setCustomAttribute('example', 'a hardcoded value');
    return $customer;
}

В Magento есть достойное руководство по использованию плагинов в их документации сайт:

Http://devdocs.magento.com/guides/v2.0/extension-dev-guide/plugins.html#plugin-example

 3
Author: Nathan Toombs, 2016-01-11 19:11:38