A propriedade não possui o configurador correspondente na classe Magento \ Quote \ Api \ Data \ AddressInterface durante a etapa de verificação da alteração


18

1 - Eu adiciono um atributo eav ao customer_address

$attributesInfo = [
    'reference' => [
         'label' => 'Reference',
         'type' => 'varchar',
         'input' => 'text',
         'position' => 100,
         'visible' => true,
         'required' => false,
    ],
];

foreach ($attributesInfo as $attributeCode => $attributeParams) {
    $customerSetup->addAttribute('customer_address', $attributeCode, $attributeParams);
}

2 - Adicionei o atributo extension no meu módulo

<extension_attributes for="Magento\Quote\Api\Data\AddressInterface">
    <attribute code="reference" type="string"/>
</extension_attributes>

No meu requirejs-config.js, substituo algum arquivo javascript para adicionar o campo de referência

var config = {
"map": {
    "*": {
        "Magento_Checkout/js/model/shipping-save-processor/default" : "Agr_Checkout/js/shipping-save-processor-default-override",
        "Magento_Customer/js/model/customer/address" : "Agr_Checkout/js/model/customer/address",
        "Magento_Checkout/js/model/address-converter" : "Agr_Checkout/js/model/address-converter",
        "Magento_Checkout/js/model/new-customer-address" : "Agr_Checkout/js/model/new-customer-address"
    }
}

3 - Confirmo que o campo de referência está enviando o endereço

insira a descrição da imagem aqui

4 - Quando envio minhas informações de remessa (Clique em Avançar), estou recebendo este erro: "Propriedade" Referência "não possui setter correspondente na classe" Magento \ Quote \ Api \ Data \ AddressInterface "."

insira a descrição da imagem aqui

Eu já faço: - Limpe e libere o cache magento - Execute a instalação: upgrade - Execute a instalação: di: compile

O que estou fazendo de errado?


A resposta abaixo funcionou?
Stevie G

Resolvi por inserção sql rígida, executando um script para atualização de referência com o address_id, sei que está errado, mas estava um pouco apressado, testarei e darei um feedback mais tarde.
allamgr

Eu não acho que você pode ser culpado ... aparentemente, você pode adicionar atributos personalizados no Enterprise e até agora não encontrei nenhuma maneira de "checkout facilmente personalizável" contornar isso.
LM_Fielding

alguma atualização sobre?
Magento2 Devloper

@allamgr Eu também estou enfrentando o mesmo problema com o novo atributo de endereço do cliente u obteve solução para isso? você pode me compartilhar seus pensamentos sobre isso? Prnt.sc/iovkp2
Nagaraju K

Respostas:


1

A configuração de atributos em um script de configuração ou atualização do eav funciona melhor e será automaticamente adicionada aos formulários que você solicitar.

    class InstallData implements InstallDataInterface
    {
        private $_eavSetupFactory;
        private $_eavConfig;
        private $_attributeResource;
        protected $_logger;

        public function __construct(EavSetupFactory $eavSetupFactory, Config $eavConfig, Attribute $attributeResource, Monolog $logger)
        {
            $this->_eavSetupFactory = $eavSetupFactory;
            $this->_eavConfig = $eavConfig;
            $this->_attributeResource = $attributeResource;
            $this->_logger = $logger;
        }

        public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
        {
            $eavSetup = $this->_eavSetupFactory->create(['setup' => $setup]);
            $addressAttributes = [
        'attribute1' => [
            'type' => 'int',
            'label' => 'attribute1',
            'input' => 'text',
            'unique' => true,
            'required' => false,
            'visible' => true,
            'user_defined' => false,
            'position' => 100,
            'system' => false,
            'adminhtml_only' => 0
        ],
        'attribute2' => [
            'type' => 'int',
            'label' => 'attribute2',
            'input' => 'text',
            'required' => false,
            'visible' => true,
            'user_defined' => false,
            'position' => 110,
            'system' => false,
            'adminhtml_only' => 1
        ]
    ];

    $usedInFormsAddress = [
            'adminhtml_customer_address',
            'customer_address_edit',
            'customer_register_address'
        ];

    foreach ($addressAttributes as $code => $options) {
        $eavSetup->addAttribute(
            'customer_address',
            $code,
            $options
        );

        try {
            $attribute = $this->_eavConfig->getAttribute('customer_address', $code);
            $attribute->setData(
                'used_in_forms',
                $usedInFormsAddress
            );
            $this->_attributeResource->save($attribute);
        } catch (LocalizedException $exception) {
            $this->_logger->critical($exception->getMessage());
        } catch (Exception $exception) {
            $this->_logger->critical($exception->getMessage());
        }
    }

insira a descrição da imagem aqui

Esse código será adicionado aos formulários e não haverá nenhum problema para salvar ou avançar para a próxima etapa

$usedInFormsAddress = [
            'adminhtml_customer_address',
            'customer_address_edit',
            'customer_register_address'
        ];

try {
            $attribute = $this->_eavConfig->getAttribute('customer_address', $code);
            $attribute->setData(
                'used_in_forms',
                $usedInFormsAddress
            );
            $this->_attributeResource->save($attribute);
        } catch (LocalizedException $exception) {
            $this->_logger->critical($exception->getMessage());
        } catch (Exception $exception) {
            $this->_logger->critical($exception->getMessage());
        }

0

Tente configurá-lo por meio de atributos personalizados.

Exemplo:

...
 custom_attribute: [{"attribute_code": "reference", "value": "Your value"}]
...

Você já fez isso funcionar ou é apenas um experimento?
LM_Fielding

Eu consegui trabalhar #
Phoenix128_RiccardoT

Com edição comunitária? Eu apreciaria muito, mesmo com recompensa, se você pudesse demonstrar como.
LM_Fielding

11
Foi com o Magento2 Enterprise Edition em um procedimento personalizado de verificação de front-end desanexado. Eu tenho que procurar esse código. É um trabalho antigo.
Phoenix128_RiccardoT

Por favor, mostre-me se o encontrar, mas acho que não está disponível.
LM_Fielding

0

como você passa o atributo na solicitação? você pode verificar o console do navegador assim

{
    ...
    extension_attributes: {
         reference: "value"
    }
}

Está certo. Você pode remover a pasta var e a pasta gerada var / cache var / page_cache var / view_proceed e gerou / .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.