คุณสมบัติไม่มีตัวตั้งค่าที่สอดคล้องกันในคลาส Magento \ Quote \ Api \ Data \ AddressInterface ขณะเปลี่ยนขั้นตอนชำระเงิน


18

1 - ฉันเพิ่มแอตทริบิวต์ 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 - ฉันเพิ่มแอตทริบิวต์ส่วนขยายในโมดูลของฉัน

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

ใน requirejs-config.js ของฉันฉันแทนที่ไฟล์จาวาสคริปต์เพื่อเพิ่มฟิลด์อ้างอิง

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 - ฉันยืนยันว่าฟิลด์อ้างอิงกำลังส่งที่อยู่

ป้อนคำอธิบายรูปภาพที่นี่

4 - เมื่อฉันส่งข้อมูลการจัดส่งของฉัน (คลิกที่ถัดไป) ฉันได้รับข้อผิดพลาดนี้: "การอ้างอิง" คุณสมบัติ "ไม่มีตัวตั้งค่าที่สอดคล้องกันในคลาส" วีโอไอพี \ Quote \ Api \ Data \ AddressInterface "

ป้อนคำอธิบายรูปภาพที่นี่

ฉันได้ทำไปแล้ว: - ล้างและล้างแคชของวีโอไอพี - เริ่มการตั้งค่า: อัปเกรด - เริ่มการตั้งค่า: di: คอมไพล์

ฉันทำอะไรผิด


คำตอบด้านล่างใช้งานได้จริงหรือ
Stevie G

ฉันแก้ไขด้วยการแทรก sql ที่ยากใช้งานสคริปต์สำหรับการปรับปรุงเดอ้างอิงกับ address_id ฉันรู้ว่าผิด แต่ฉันรีบหน่อยฉันจะทดสอบและให้ข้อเสนอแนะในภายหลัง
allamgr

ฉันไม่คิดว่าคุณจะถูกตำหนิ ... เห็นได้ชัดว่าคุณสามารถเพิ่ม custom_attributes ใน Enterprise เท่านั้นและจนถึงตอนนี้ฉันไม่พบวิธีการ "ชำระเงินที่ปรับแต่งได้ง่าย" รอบนี้
LM_Fielding

อัพเดทใด ๆ เกี่ยวกับ?
Magento2 Devloper

@ allamgr ฉันยังประสบปัญหาเดียวกันกับแอตทริบิวต์ที่อยู่ลูกค้าใหม่คุณได้รับการแก้ปัญหาสำหรับเรื่องนี้หรือไม่? คุณสามารถแบ่งปันความคิดของคุณกับสิ่งนี้ได้ไหม prnt.sc/iovkp2
Nagaraju K

คำตอบ:


1

การตั้งค่าคุณลักษณะในการตั้งค่า eav หรือสคริปต์อัปเกรดจะทำงานได้ดีที่สุดและจะเพิ่มในแบบฟอร์มที่คุณร้องขอเพื่อเพิ่มโดยอัตโนมัติ

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

ป้อนคำอธิบายรูปภาพที่นี่

รหัสนี้จะเพิ่มลงในแบบฟอร์มและจะไม่มีปัญหาในการบันทึกหรือไปที่ขั้นตอนถัดไป

$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

ลองตั้งค่าผ่านแอตทริบิวต์ที่กำหนดเอง

ตัวอย่าง:

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

คุณเคยได้รับสิ่งนี้ในการทำงานหรือเป็นเพียงการทดลอง?
LM_Fielding

ฉันทำให้มันทำงานได้
Phoenix128_RiccardoT

ด้วยชุมชนฉบับ? ฉันจะขอบคุณมันอย่างมากแม้ว่าจะได้รับเงินรางวัลมากมายหากคุณสามารถสาธิตได้
LM_Fielding

1
มันเป็นกับ Magento2 Enterprise Edition ในขั้นตอนการชำระเงินส่วนหน้าเดี่ยวที่กำหนดเอง ฉันต้องค้นหารหัสนั้น มันเป็นงานเก่า
Phoenix128_RiccardoT

กรุณาแสดงให้ฉันถ้าคุณพบมัน แต่ฉันไม่คิดว่ามันใช้ได้
LM_Fielding

0

คุณจะส่งแอตทริบิวต์ในคำขอได้อย่างไร คุณสามารถตรวจสอบคอนโซลของเบราว์เซอร์เช่นนั้นได้

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

ถูกต้อง. คุณสามารถลบโฟลเดอร์ var และสร้างโฟลเดอร์ var / แคช var / page_cache var / view_proceed และสร้าง /

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.