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.