Пользовательские атрибуты клиента стираются при обновлении электронной почты или пароля

#magento #magento2

#magento #magento2

Вопрос:

Я создал пользовательские атрибуты клиента для внутреннего использования, я имею в виду, которые доступны только для администратора на серверной части. Проблема в том, что если пользователь обновляет свой адрес электронной почты или пароль из своей учетной записи, эти пользовательские атрибуты стираются… Буквально пусто. С другой стороны, если я изменяю адрес электронной почты или пароль для пользователя из серверной части, эти поля остаются нетронутыми, я имею в виду, что информация не стирается.

Вот как я создал атрибуты:

 <?php

namespace VendorModuleSetup;

use MagentoEavSetupEavSetup;
use MagentoEavSetupEavSetupFactory;
use MagentoFrameworkSetupInstallDataInterface;
use MagentoFrameworkSetupModuleContextInterface;
use MagentoFrameworkSetupModuleDataSetupInterface;
use MagentoEavModelConfig;
use MagentoCustomerModelCustomer;

class InstallData implements InstallDataInterface {
    /**
     * EAV setup factory
     *
     * @var MagentoEavSetupEavSetupFactory
     */
    private $eavSetupFactory;

    public function __construct(EavSetupFactory $eavSetupFactory, Config $eavConfig)
    {
        $this->eavSetupFactory = $eavSetupFactory;
        $this->eavConfig       = $eavConfig;
    }

    public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
    {

        $eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);
        if (version_compare($context->getVersion(), '1.0.0') < 0){ 

            //Numero de Cliente
           $eavSetup -> addAttribute(MagentoCustomerModelCustomer::ENTITY,
                'numcte',
                [
                    'label' => 'Numero de Cliente',
                    'system' => 0,
                    'position' => 100,
                    'sort_order' =>100,
                    'visible' =>  true,
                    'note' => '',
                    'type' => 'int',
                    'input' => 'text',

                ]
            );
            $numcte = $this->eavConfig->getAttribute(Customer::ENTITY, 'numcte');
            $numcte->setData('is_user_defined',1)->setData('is_required',0)->setData('default_value','')->setData('used_in_forms', ['adminhtml_customer', 'checkout_register', 'customer_account_create', 'customer_account_edit', 'adminhtml_checkout']);
            $numcte->save();

        }




    }

}
  

Я вижу атрибуты на серверной части и фактически работаю с этими значениями в некоторых других процессах. Но здесь я буквально схожу с ума от того, что происходит. Я последние 2 дня пытаюсь понять, что происходит. Не могли бы вы помочь, пожалуйста?

С уважением!

Ответ №1:

Пожалуйста, замените приведенный ниже код:

 $numcte->setData('is_user_defined',1)->setData('is_required',0)->setData('default_value','')->setData('used_in_forms', ['adminhtml_customer', 'checkout_register', 'customer_account_create', 'customer_account_edit', 'adminhtml_checkout']);
  

С помощью этого:

 $numcte->setData('is_user_defined',1)->setData('is_required',0)->setData('default_value','')->setData('used_in_forms', ['adminhtml_customer']);
  

А затем попробуйте создать атрибут. Для повторного создания, пожалуйста, сначала удалите запись модуля из таблицы setup_module, а затем запустите команду обновления.

Комментарии:

1. Чувак! Это работает как шарм!. Я просто удаляю атрибуты, а не запись из setup_module. Спасибо!

2. Рад слышать, что ваша проблема была решена. Пожалуйста, примите ответ.