Я хочу добавить пользовательский атрибут на customer_address.Мне нужно сохранить значение в БД, вызвать его в формах внешнего интерфейса (новый / изменить адрес), а также в бэкэнде.
Я использовал следующий скрипт InstallData для добавления нового атрибута:
$installer = $setup;
$installer->startSetup();
/* @var CustomerSetup $customerSetup */
$customerSetup = $this->customerSetupFactory->create(['setup' => $setup]);
$customerSetup->removeAttribute('customer_address', "chamber_of_commerce");
$customerEntity = $customerSetup->getEavConfig()->getEntityType('customer_address'); //customer
$attributeSetId = $customerEntity->getDefaultAttributeSetId();
$attributeSet = $this->attributeSetFactory->create();
$attributeGroupId = $attributeSet->getDefaultGroupId($attributeSetId);
$customerSetup->addAttribute('customer_address', 'chamber_of_commerce', [
'type' => 'varchar',
'label' => 'Chamber of Commerce',
'input' => 'text',
'required' => false,
'visible' => true,
'user_defined' => true,
'system' => false,
'sort_order' => 150
]);
$attribute = $customerSetup->getEavConfig()->getAttribute('customer_address', 'chamber_of_commerce')
->addData([
'attribute_set_id' => $attributeSetId,
'attribute_group_id' => $attributeGroupId,
'used_in_forms'=>['adminhtml_customer_address','customer_address_edit','customer_register_address']
]);
$attribute->save();
$installer->endSetup();
Я использовал 'used_in_forms'=>['adminhtml_customer_address','customer_address_edit','customer_register_address']
`, но кажется, что только в бэкэнд-форму добавляется автоматически, а также сохраняется новое значение.
Я вручную добавил вход для отображения атрибута в веб-интерфейсе нановый / изменить адрес в CustomerAccount, но мне не удается получить значение из БД или сохранить новое значение.
Я думаю, что что-то упустил, и я был бы очень признателен, если бы кто-то мог взглянуть и дать подсказку.
Я использую Magento 2.2.4
Обновление: 1. Я использовал наблюдатель для Magento \ Customer \ Model \ Address, чтобы сохранить значение для редактирования./ новый адрес со страницы MyAccount.
Чтобы получить значение, сохраненное также со страницы оформления заказа, я использовал:
2.1.extension_attributes для Customer AddressInterface
<extension_attributes for="Magento\Customer\Api\Data\AddressInterface">
<attribute code="chamber_of_commerce" type="string" />
</extension_attributes>
2.2.etc / fieldset:
<fieldset id="sales_convert_quote_address">
<field name="chamber_of_commerce">
<aspect name="to_customer_address" />
<aspect name="to_order_address" />
</field>
</fieldset>
2.3.плагин для адреса клиента для функции beforeUpdateData
<type name="Magento\Customer\Model\Address">
<plugin disabled="false" name="vendor_plugin_quote_model_address" sortOrder="10"
type="Vendor\Module\Plugin\Customer\Model\Address"/>
</type>