La proprietà non ha setter corrispondente nella classe Magento \ Quote \ Api \ Data \ AddressInterface durante il passaggio di verifica della modifica


18

1 - Aggiungo un attributo eav a 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 - Ho aggiunto l'attributo extension nel mio modulo

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

Nel mio requestjs-config.js ho la precedenza su alcuni file javascript per aggiungere un campo di riferimento

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 - Confermo che il campo di riferimento sta inviando l'indirizzo

inserisci qui la descrizione dell'immagine

4 - Quando invio i miei dati di spedizione (fare clic su Avanti), visualizzo questo errore: "Proprietà" Riferimento "non ha setter corrispondente nella classe" Magento \ Quote \ Api \ Data \ AddressInterface "."

inserisci qui la descrizione dell'immagine

Faccio già: - Pulisci e svuota la cache di Magento - Esegui setup: aggiorna - Esegui setup: di: compile

Cosa sto facendo di sbagliato?


La risposta qui sotto ha funzionato?
— Stevie G,

Ho risolto con un duro inserimento di sql, eseguendo uno script per update de reference con address_id, so che è sbagliato ma ero un po 'affrettato, testerò e ti darò un feedback più tardi.
— allamgr

Non credo che tu possa essere incolpato ... a quanto pare puoi solo aggiungere custom_attributes in Enterprise e finora non ho trovato nessun "checkout facilmente personalizzabile".
— LM_Fielding

qualche aggiornamento in merito?
— Magento2 Devloper

@allamgr Sto anche affrontando lo stesso problema con il nuovo attributo dell'indirizzo cliente hai trovato una soluzione per questo? puoi condividere i tuoi pensieri su questo. prnt.sc/iovkp2
— Nagaraju K

Risposte:


1

L'impostazione degli attributi in una configurazione eav o uno script di aggiornamento funziona meglio e verrà automaticamente aggiunta ai moduli a cui si richiede di aggiungerlo.

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

inserisci qui la descrizione dell'immagine

Questo codice qui verrà aggiunto ai moduli e non ci saranno problemi nel salvataggio o nel passaggio successivo

$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

Prova a impostarlo tramite attributi personalizzati.

Esempio:

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

Ti è mai capitato di farlo funzionare o è solo un esperimento?
— LM_Fielding

Ho funzionato
— Phoenix128_RiccardoT

Con l'edizione community? Lo apprezzerei molto, anche con la grazia se potessi dimostrare come.
— LM_Fielding

1
Era con Magento2 Enterprise Edition su una procedura di checkout di frontend staccata personalizzata. Devo cercare quel codice. È un vecchio lavoro.
— Phoenix128_RiccardoT

Per favore, fammi vedere se lo trovi, ma non credo sia disponibile.
— LM_Fielding

0

come si passa l'attributo nella richiesta? puoi controllare la console del browser in questo modo

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

È corretto. È possibile rimuovere la cartella var e la cartella generata var / cache var / page_cache var / view_proceed e generate / .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.