Magento 2, как сохранить настраиваемое поле, добавленное в форме группы клиентов?

magento.stackexchange https://magento.stackexchange.com//questions/91992

Вопрос

Я добавил несколько настраиваемых полей в форму группы клиентов, используя upgradeSchema.php.

После этого я обнаружил, что исходные поля, такие как код группы клиентов и идентификатор налога, сохраняются с помощью методов установки в предоставленном API.Он полностью отличается от Magento 1.X, в котором для сохранения используется только setXXX().

Это было полезно?

Решение

В этом случае следует использовать механизм атрибутов расширения.Это позволяет расширять основные API с помощью сторонних модулей.Общие шаги для включения нового атрибута расширения:

  1. Объявите атрибут расширения, как описано в разделе официальные документы.После очистки var и бег <project_root>/bin/magento setup:di:compile, соответствующие установщик и геттер для этого нового атрибута должны появиться в \Magento\Customer\Api\Data\GroupExtensionInterface (этот интерфейс генерируется автоматически)
  2. Пишите плагины для \Magento\Customer\Api\GroupRepositoryInterface::save, \Magento\Customer\Api\GroupRepositoryInterface::getById (и любые другие методы обслуживания, если необходимо) для сохранения/загрузки нового атрибута.Как разработчик расширения, только вы знаете, где должен храниться этот атрибут, это может быть любая таблица.Видеть \Magento\Downloadable\Model\Plugin\AroundProductRepositorySave::aroundSave В качестве примера
  3. Если вам нужно сделать этот атрибут видимым в коллекции (чтобы сделать его доступным для поиска/фильтрации), объявите join узел.Если нет, то просто пропустите это
  4. Получите доступ к своему пользовательскому атрибуту как: $customerGroup->getExtensionAttributes()->getMyAttribute(), где customerGroup реализует \Magento\Customer\Api\Data\GroupInterface. setMyAttribute() также можно использовать

Ниже приведен пример конфигурации, которую следует разместить в VendorName/ModuleName/etc/extension_attributes.xml

<?xml version="1.0"?>
<config>
    <extension_attributes for="Magento\Customer\Api\Data\GroupInterface">
        <!--Data interface can be used as a type of attribute, see example in CatalogInventory module-->
        <attribute code="name_of_attribute" type="string">
            <resources>
                <resource ref="VendorName_ModuleName::someAclNode"/>
            </resources>
            <!--Join is optional, only if you need to have added attribute visible in groups list-->
            <join reference_table="table_where_attribute_is_stored" reference_field="group_id_field_in_that_table" join_on_field="group_id">
                <field>name_of_added_attribute_field_in_that_table</field>
            </join>
        </attribute>
    </extension_attributes>
</config>

Другие советы

Не забывайте, что модуль нуждается в register.php файл в нем, и вы должны использовать bin/magento module:enable VendorName_ModuleName прежде чем оно появится!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top