La propriété n'a pas de setter correspondant dans la classe Magento \ Quote \ Api \ Data \ AddressInterface lors de l'étape de retrait de la modification


18

1 - J'ajoute un attribut eav à 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 - J'ai ajouté l'attribut d'extension dans mon module

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

Dans mon requirejs-config.js, je remplace un fichier javascript pour ajouter un champ de référence

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 - Je confirme que le champ de référence envoie une adresse

entrez la description de l'image ici

4 - Lorsque j'envoie mes informations d'expédition (cliquez sur Suivant), j'obtiens cette erreur: "Property" Reference "n'a pas de setter correspondant dans la classe" Magento \ Quote \ Api \ Data \ AddressInterface "."

entrez la description de l'image ici

Je fais déjà: - Nettoyer et vider le cache magento - Exécuter la configuration: mise à niveau - Exécuter la configuration: di: compiler

Qu'est-ce que je fais mal?


La réponse ci-dessous a-t-elle fonctionné?
— Stevie G

J'ai résolu par une insertion SQL difficile, en exécutant un script de mise à jour de référence avec l'adresse_id, je sais que c'est faux mais j'étais un peu pressé, je vais tester et vous donner un retour plus tard.
— allamgr

Je ne pense pas que vous puissiez être blâmé ... apparemment, vous ne pouvez ajouter que custom_attributes dans Enterprise et jusqu'à présent je n'ai trouvé aucun moyen de "checkout facilement personnalisable".
— LM_Fielding

toute mise à jour concernant?
— Magento2 Devloper

@allamgr Je suis également confronté au même problème avec le nouvel attribut d'adresse client. Avez-vous obtenu une solution pour cela? pouvez-vous me faire part de vos réflexions à ce sujet. prnt.sc/iovkp2
— Nagaraju K

Réponses:


1

La configuration des attributs dans un script de configuration ou de mise à niveau d'eav fonctionne mieux et s'ajoutera automatiquement aux formulaires auxquels vous souhaitez l'ajouter.

    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());
        }
    }

entrez la description de l'image ici

Ce code s'ajoutera ici aux formulaires et il n'y aura aucun problème d'enregistrement ou de passer à l'étape suivante

$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

Essayez de le définir via des attributs personnalisés.

Exemple:

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

Avez-vous déjà réussi à le faire fonctionner ou s'agit-il seulement d'une expérience?
— LM_Fielding

Je l'ai fait fonctionner
— Phoenix128_RiccardoT

Avec l'édition communautaire? Je l'apprécierais grandement, même avec générosité si vous pouviez démontrer comment.
— LM_Fielding

1
C'était avec Magento2 Enterprise Edition sur une procédure de paiement frontend détachée personnalisée. Je dois rechercher ce code. C'est un vieux travail.
— Phoenix128_RiccardoT

Veuillez me montrer si vous le trouvez, mais je ne pense pas qu'il soit disponible.
— LM_Fielding

0

comment passez-vous l'attribut dans la demande? vous pouvez vérifier la console du navigateur comme ça

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

C'est correct. Vous pouvez supprimer le dossier var et le dossier généré var / cache var / page_cache var / view_proceed et généré / .

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.