Magento 2 - Программное обновление пользовательского атрибута клиента
Я пытаюсь обновить пользовательский атрибут клиента, у меня есть следующий код
<?php
namespace Vendor\Module\Plugin;
use Magento\Customer\Model\ResourceModel\CustomerRepository;
use Magento\Customer\Api\CustomerRepositoryInterface;
use Magento\Customer\Api\Data\CustomerInterfaceFactory;
use Magento\Customer\Model\CustomerFactory;
class CustomerAfterSave
{
protected $_customerDataFactory;
protected $_customerRepositoryInterface;
protected $_customerRepository;
public function __construct(
\Magento\Customer\Api\CustomerRepositoryInterface $customerRepositoryInterface,
\Magento\Customer\Model\CustomerFactory $customerFactory,
) {
$this->_customerRepositoryInterface = $customerRepositoryInterface;
$this->_customerFactory = $customerFactory;
}
public function afterSave(CustomerRepository $subject,$savedCustomer)
{
//Get Customer
$customerId = $savedCustomer->getId();
$customer = $this->_customerRepositoryInterface->getById($customerId);
$customer->setCustomAttribute('my_custom_attribute', 'test');
$this->_customerRepositoryInterface->save($customer);
exit;
Но затем я получаю следующую ошибку
( ! ) Fatal error: Maximum function nesting level of '256' reached, aborting! in /vendor/magento/module-customer/Model/ResourceModel/Address.php on line 58
Может ли кто-нибудь посоветовать и посмотреть, где я ошибаюсь
Редактировать: Я не считаю, что это дублирующий вопрос, так как я отключил xdebug, и код просто истекает
Дальнейшее редактирование: Я думаю, что моя проблема такая же, как Magento 2: Как сохранить данные в базе данных
2
2 answers
Используйте плагин beforeSave
. Использование afterSave
вызвало бесконечный цикл.
1
Author: Khoa TruongDinh, 2017-12-18 15:10:18
Попробуйте ниже UpgradeData.php сценарий.
<?php
namespace Vendor\CustomModule\Setup;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Framework\Setup\UpgradeDataInterface;
use Magento\Eav\Setup\EavSetup;
class UpgradeData implements UpgradeDataInterface
{
/**
* @var \Magento\Eav\Model\ResourceModel\Entity\Attribute
*/
protected $_eavAttribute;
public function __construct(
EavSetup $eavSetupFactory,
\Magento\Eav\Model\ResourceModel\Entity\Attribute $eavAttribute
) {
$this->eavSetupFactory = $eavSetupFactory;
$this->_eavAttribute = $eavAttribute;
}
/**
* @param ModuleDataSetupInterface $setup
* @param ModuleContextInterface $context
*/
public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
{
if (version_compare($context->getVersion(), '1.0.1', '<')) {
$setup->startSetup();
$entityType = $this->eavSetupFactory->getEntityType(\Magento\Customer\Model\Customer::ENTITY);
$entityTypeId = $entityType['entity_type_id'];
$attributeId = $this->_eavAttribute->getIdByCode(\Magento\Customer\Model\Customer::ENTITY, 'prefix');
$this->eavSetupFactory->updateAttribute($entityTypeId, $attributeId, 'is_required', 0, null);
$setup->endSetup();
}
}
}
0
Author: Kazim Noorani, 2020-11-25 08:56:31