magento2 добавление атрибутов клиента - PullRequest
0 голосов
/ 04 марта 2019

Использование Magento 2.3.0. Всякий раз, когда я пытаюсь спасти клиента, я получаю сообщения о том, что требуются вновь созданные атрибуты, даже когда я устанавливаю их значения.

etc / exte_attributes.xml

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Api/etc/extension_attributes.xsd">
    <extension_attributes for="Magento\Customer\Api\Data\CustomerInterface">
        <attribute code="customershipping_enabled" type="string" />
        <attribute code="customershipping_price" type="string" />
    </extension_attributes>
</config>

Setup / InstallData.php

<?php
namespace <vendor>\<module_name>\Setup;

use Magento\Eav\Model\Entity\Attribute\Source\Boolean;

use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;

class InstallData implements InstallDataInterface {
    private $customerSetupFactory;

    public function __construct(
        \Magento\Customer\Setup\CustomerSetupFactory $customerSetupFactory
    ) {
        $this->customerSetupFactory = $customerSetupFactory;
    }

    public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context) {
        $customerSetup =$this->customerSetupFactory->create(['setup'=>$setup]);

        $setup->startSetup();

        $customerSetup->addAttribute('customer', 'customershipping_enabled', [
            'label'=>'Customer Shipping Enabled',
            'type' => 'int',
            'input' => 'select',
            'source' => Boolean::class,
            'required'=>true,
            'visible'=>true,
            'default' => 0,
            'position' => 198,
        ]);

        $customerSetup->addAttribute('customer', 'customershipping_price', [
            'label'=>'Customer Shipping Price',
            'type'=>'decimal',
            'input' => 'text',
            'required'=>true,
            'visible'=>true,
            'default' => 0,
            'position' => 199,
        ]);

        $enabledAttribute = $customerSetup->getEavConfig()->getAttribute('customer', 'customershipping_enabled');
        $enabledAttribute->setData('used_in_forms', ['adminhtml_customer']);
        $enabledAttribute->save();

        $priceAttribute = $customerSetup->getEavConfig()->getAttribute('customer', 'customershipping_price');
        $priceAttribute->setData('used_in_forms', ['adminhtml_customer']);
        $priceAttribute->save();

        $setup->endSetup();
    }
}

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

Также выглядит идентично этому посту: mage2gen.com / snippets / customerattribute

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Основной причиной этой проблемы является поведение проекта magento 2.

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

Если вы хотите, чтобы пользовательский атрибут был обязательным только в некоторых определенных формах, вместо него следует использовать атрибут расширения со значением 'required' => false.

Атрибуты расширения используются для расширения функциональностинастраиваемые атрибуты.

Вам просто нужно заменить

'required' => true,

на

'обязательный '=> false,

Для получения более подробной информации, пожалуйста, перейдите по ссылке: Нажмите здесь

0 голосов
/ 05 марта 2019

У меня недавно была похожая проблема, попробуйте добавить ее в 'used_in_forms'.

Возможно, вам придется удалить атрибут и переустановить его:

'used_in_forms' => ['adminhtml_customer', 'customer_account_edit', 'customer_account_create']

edit

О, я думаю, что это должно решить проблему, только что проверил мои сценарии installData и upgradeData, и все они имеют system => 0 .Просто добавьте его.

    $customerSetup->addAttribute('customer', 'customershipping_enabled', [
        'label'=>'Customer Shipping Enabled',
        'type' => 'int',
        'input' => 'select',
        'source' => Boolean::class,
        'required'=>true,
        'visible'=>true,
        'default' => 0,
        'position' => 198,
        'system' => 0
    ]);

Это будет связано с этой проблемой:

https://apiworks.net/magento2/magento-2-is-not-saving-the-customer-attribute/

Функция getCustomAttributesMetadata проходит по всем атрибутам EAV.и проверка, помечен ли атрибут как «is_system» в таблице «customer_eav_attribute», что было в случае с моим настраиваемым атрибутом.

Решение:

По умолчанию Magento пометил мой настраиваемый атрибут какis_system = 1, поэтому мне просто нужно было добавить 'system' => false в мой скрипт обновления и выполнить его снова (после того, как я удалил исходный атрибут непосредственно из базы данных.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...