更新电子邮件或密码时删除自定义客户属性
Custom customer attributes erase when updating email or password
我已经为内部使用创建了自定义客户属性,我的意思是,这些属性仅供后端管理员使用。问题是,如果用户从其帐户更新其电子邮件或密码,那么这些自定义属性将被删除……实际上是空的。另一方面,如果我从后端修改用户的电子邮件或密码,这些字段将保持不变,我的意思是,信息不会被删除。
这是我创建属性的方式:
<?php
namespace Vendor\Module\Setup;
use Magento\Eav\Setup\EavSetup;
use Magento\Eav\Setup\EavSetupFactory;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Eav\Model\Config;
use Magento\Customer\Model\Customer;
class InstallData implements InstallDataInterface {
/**
* EAV setup factory
*
* @var \Magento\Eav\Setup\EavSetupFactory
*/
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(\Magento\Customer\Model\Customer::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 天我一直在试图弄清楚发生了什么。你能帮忙吗?
亲切的问候!
请替换以下代码:
$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']);
然后尝试创建属性。对于 re-create,请先从 setup_module table 中删除模块条目,然后 运行 升级命令。
我已经为内部使用创建了自定义客户属性,我的意思是,这些属性仅供后端管理员使用。问题是,如果用户从其帐户更新其电子邮件或密码,那么这些自定义属性将被删除……实际上是空的。另一方面,如果我从后端修改用户的电子邮件或密码,这些字段将保持不变,我的意思是,信息不会被删除。
这是我创建属性的方式:
<?php
namespace Vendor\Module\Setup;
use Magento\Eav\Setup\EavSetup;
use Magento\Eav\Setup\EavSetupFactory;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Eav\Model\Config;
use Magento\Customer\Model\Customer;
class InstallData implements InstallDataInterface {
/**
* EAV setup factory
*
* @var \Magento\Eav\Setup\EavSetupFactory
*/
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(\Magento\Customer\Model\Customer::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 天我一直在试图弄清楚发生了什么。你能帮忙吗?
亲切的问候!
请替换以下代码:
$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']);
然后尝试创建属性。对于 re-create,请先从 setup_module table 中删除模块条目,然后 运行 升级命令。