Thuộc tính không có trình thiết lập tương ứng trong lớp Magento \ Trích dẫn \ Api \ Dữ liệu \ Địa chỉ trong khi thay đổi bước thanh toán


18

1 - Tôi thêm một thuộc tính eav cho 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 - Tôi đã thêm thuộc tính mở rộng trong mô-đun của mình

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

Trong Requjs-config.js của tôi, tôi ghi đè một số tệp javascript để thêm trường tham chiếu

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 - Tôi xác nhận rằng trường tham chiếu đang gửi trong địa chỉ

nhập mô tả hình ảnh ở đây

4 - Khi tôi gửi thông tin giao hàng của mình (Nhấp vào Tiếp theo) Tôi gặp lỗi này: "Thuộc tính" Tham chiếu "không có trình thiết lập tương ứng trong lớp" Magento \ Trích dẫn \ Api \ Data \ addressInterface "."

nhập mô tả hình ảnh ở đây

Tôi đã làm: - Làm sạch và xóa bộ nhớ cache magento - Chạy thiết lập: nâng cấp - Chạy thiết lập: di: biên dịch

Tôi đang làm gì sai?


Câu trả lời dưới đây có hiệu quả không?
Stevie G

Tôi đã giải quyết bằng cách chèn sql cứng, thực thi tập lệnh để cập nhật de tham chiếu với address_id, tôi biết là sai nhưng tôi hơi vội, tôi sẽ kiểm tra và cung cấp cho bạn thông tin phản hồi sau.
allamgr

Tôi không nghĩ bạn có thể bị đổ lỗi ... rõ ràng bạn chỉ có thể thêm custom_attribut trong Enterprise và cho đến nay tôi không tìm thấy cách "thanh toán dễ dàng tùy chỉnh" nào xung quanh vấn đề này.
LM_Fielding

bất kỳ cập nhật liên quan?
Magento2 Devloper

@allamgr tôi cũng đang đối mặt với vấn đề tương tự với thuộc tính địa chỉ khách hàng mới, bạn có nhận được giải pháp cho việc này không? bạn có thể chia sẻ cho tôi suy nghĩ của bạn về điều này. prnt.sc/ Nghikp2
Nagaraju K

Câu trả lời:


1

Thiết lập các thuộc tính trong một thiết lập eav hoặc tập lệnh nâng cấp hoạt động tốt nhất và sẽ tự động thêm vào các biểu mẫu bạn yêu cầu để thêm nó vào.

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

nhập mô tả hình ảnh ở đây

Mã này ở đây sẽ thêm vào các biểu mẫu và sẽ không có vấn đề gì khi lưu hoặc chuyển sang bước tiếp theo

$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

Hãy thử thiết lập nó thông qua các thuộc tính tùy chỉnh.

Thí dụ:

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

Bạn đã bao giờ làm điều này để làm việc hay nó chỉ là một thử nghiệm?
LM_Fielding

Tôi đã làm cho nó hoạt động
Phoenix128_RiccardoT

Với phiên bản cộng đồng? Tôi sẽ đánh giá rất cao nó, ngay cả với tiền thưởng nếu bạn có thể chứng minh làm thế nào.
LM_Fielding

1
Đó là với Magento2 Enterprise Edition trên một quy trình thanh toán frontend tách rời tùy chỉnh. Tôi phải tìm kiếm mã đó. Đó là một công việc cũ.
Phoenix128_RiccardoT

Vui lòng chỉ cho tôi nếu bạn tìm thấy nó, nhưng tôi không nghĩ nó có sẵn.
LM_Fielding

0

Làm thế nào để bạn vượt qua thuộc tính trong yêu cầu? bạn có thể kiểm tra bảng điều khiển trình duyệt như thế

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

Đúng. Bạn có thể xóa thư mục var và thư mục đã tạo var / cache var / page_cache var / view_proceed và created / .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.