magento 2.2.5: Добавление пользовательского атрибута в форму редактирования клиента в администраторе
Я пытаюсь добавить пользовательский атрибут, используя приведенный ниже код, но он не работает -
namespace A2bizz\Customer\Setup; use Magento\Customer\Setup\CustomerSetupFactory; use Magento\Customer\Model\Customer; use Magento\Eav\Model\Entity\Attribute\Set as AttributeSet; use Magento\Eav\Model\Entity\Attribute\SetFactory as AttributeSetFactory; use Magento\Framework\Setup\InstallDataInterface; use Magento\Framework\Setup\ModuleContextInterface; use Magento\Framework\Setup\ModuleDataSetupInterface; /** * @codeCoverageIgnore */ class InstallData implements InstallDataInterface { /** * @var CustomerSetupFactory */ protected $customerSetupFactory; /** * @var AttributeSetFactory */ private $attributeSetFactory; /** * @param CustomerSetupFactory $customerSetupFactory * @param AttributeSetFactory $attributeSetFactory */ public function __construct( CustomerSetupFactory $customerSetupFactory, AttributeSetFactory $attributeSetFactory ) { $this->customerSetupFactory = $customerSetupFactory; $this->attributeSetFactory = $attributeSetFactory; } public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context) { $setup->startSetup(); /** @var CustomerSetup $customerSetup */ $customerSetup = $this->customerSetupFactory->create(['setup' => $setup]); $customerEntity = $customerSetup->getEavConfig()->getEntityType('customer'); $attributeSetId = $customerEntity->getDefaultAttributeSetId(); /** @var $attributeSet AttributeSet */ $attributeSet = $this->attributeSetFactory->create(); $attributeGroupId = $attributeSet->getDefaultGroupId($attributeSetId); $customerSetup->addAttribute(Customer::ENTITY, 'a2bizz_attribute2', [ 'type' => 'varchar', 'label' => 'Custom Attribute2', 'input' => 'text', 'required' => false, 'visible' => true, 'user_defined' => true, 'sort_order' => 1000, 'position' => 1000, 'system' => 0, ]); $attribute = $customerSetup->getEavConfig()->getAttribute(Customer::ENTITY, 'a2bizz_attribute2') ->addData([ 'attribute_set_id' => $attributeSetId, 'attribute_group_id' => $attributeGroupId, 'used_in_forms' => ['adminhtml_customer'], ]); $attribute->save(); $setup->endSetup(); } }
Я проверяю внутренние записи в базе данных, запись атрибута добавляется в таблицы, eav_attribute
и customer_eav_attribute
Но все равно это не отображается в форме редактирования в разделе администратора.
Я также выполняю следующие команды -
php bin/magento setup:upgrade php bin/magento setup:static-content:deploy php bin/magento cache:flush
3
1 answers
Проверьте следующее. Это работает для меня, чтобы добавить пользовательский атрибут -
A2bizz/Example/Setup/InstallData.php
namespace A2bizz\Example\Setup;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Framework\Setup\ModuleContextInterface;
class InstallData implements InstallDataInterface {
private $_eavSetupFactory;
private $_attributeRepository;
public function __construct(
\Magento\Eav\Setup\EavSetupFactory $eavSetupFactory,
\Magento\Eav\Model\AttributeRepository $attributeRepository
)
{
$this->_eavSetupFactory = $eavSetupFactory;
$this->_attributeRepository = $attributeRepository;
}
public function install( ModuleDataSetupInterface $setup, ModuleContextInterface $context )
{
$eavSetup = $this->_eavSetupFactory->create(['setup' => $setup]);
// add customer_attribute to customer
$eavSetup->removeAttribute(\Magento\Customer\Model\Customer::ENTITY, 'customer_attribute');
$eavSetup->addAttribute(
\Magento\Customer\Model\Customer::ENTITY, 'customer_attribute', [
'type' => 'varchar',
'label' => 'Custom Customer Attribute',
'input' => 'text',
'required' => false,
'system' => 0,
'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
'sort_order' => '200'
]
);
// allow customer_attribute attribute to be saved in the specific areas
$attribute = $this->_attributeRepository->get('customer', 'customer_attribute');
$setup->getConnection()
->insertOnDuplicate(
$setup->getTable('customer_form_attribute'),
[
['form_code' => 'adminhtml_customer', 'attribute_id' => $attribute->getId()]
]
);
}
}
1
Author: zed Blackbeard, 2018-08-04 10:02:51