Magento 2 làm thế nào để lưu trường tùy chỉnh được thêm vào dưới dạng nhóm khách hàng?


9

Tôi đã thêm một số trường tùy chỉnh vào dạng nhóm khách hàng bằng cách sử dụng upgradeSchema.php.

Sau đó, tôi thấy rằng các trường ban đầu như mã nhóm khách hàng và id thuế được lưu bằng cách sử dụng các phương thức setter trong API được cung cấp. Nó hoàn toàn khác với Magento 1.X chỉ sử dụng setXXX () để lưu.


Tôi đã thử sử dụng \ Magento \ Khách hàng \ Api \ Dữ liệu \ GroupInterface $ customergroup-> setData ('program_type', $ programType); program_type tương ứng với cột bảng 'program_type' để lưu vào cơ sở dữ liệu, nhưng không thành công.
Ricky.C

Tôi có nên viết API tùy chỉnh với getter và setter để lưu các trường không?
Ricky.C

Câu trả lời:


22

Cơ chế thuộc tính mở rộng nên được sử dụng trong trường hợp này. Nó cho phép mở rộng API lõi bằng các mô-đun của bên thứ 3. Các bước chung để bật thuộc tính mở rộng mới:

  1. Khai báo thuộc tính mở rộng như được mô tả trong các tài liệu chính thức . Sau khi xóa varvà chạy <project_root>/bin/magento setup:di:compile, setter và getter tương ứng cho thuộc tính mới này sẽ xuất hiện \Magento\Customer\Api\Data\GroupExtensionInterface(giao diện này được tạo tự động)
  2. Viết các plugin cho \Magento\Customer\Api\GroupRepositoryInterface::save, \Magento\Customer\Api\GroupRepositoryInterface::getById(và bất kỳ phương thức dịch vụ nào khác nếu cần) để lưu / tải thuộc tính mới. Là một nhà phát triển tiện ích mở rộng, chỉ bạn biết nơi thuộc tính này sẽ được lưu trữ, có thể là bất kỳ bảng nào. Xem \Magento\Downloadable\Model\Plugin\AroundProductRepositorySave::aroundSavelàm ví dụ
  3. Nếu bạn cần làm cho thuộc tính này hiển thị trong bộ sưu tập (để làm cho nó có thể tìm kiếm / có thể lọc), hãy khai báo joinnút. Nếu không thì hãy bỏ qua
  4. Truy cập thuộc tính tùy chỉnh của bạn như : $customerGroup->getExtensionAttributes()->getMyAttribute(), nơi customerGroupthực hiện \Magento\Customer\Api\Data\GroupInterface. setMyAttribute()cũng có thể được sử dụng

Dưới đây là ví dụ về cấu hình nên được đặt VendorName/ModuleName/etc/extension_attributes.xml

<?xml version="1.0"?>
<config>
    <extension_attributes for="Magento\Customer\Api\Data\GroupInterface">
        <!--Data interface can be used as a type of attribute, see example in CatalogInventory module-->
        <attribute code="name_of_attribute" type="string">
            <resources>
                <resource ref="VendorName_ModuleName::someAclNode"/>
            </resources>
            <!--Join is optional, only if you need to have added attribute visible in groups list-->
            <join reference_table="table_where_attribute_is_stored" reference_field="group_id_field_in_that_table" join_on_field="group_id">
                <field>name_of_added_attribute_field_in_that_table</field>
            </join>
        </attribute>
    </extension_attributes>
</config>

Tôi đã cố gắng thêm phần mở rộng_attribut.xml, nhưng không có giao diện mới nào được tạo. ps Tôi đã xóa thư mục thế hệ và gọi một số thao tác .....
Ricky.C

Phần mở rộng của tôi extension_attribut> </ config>
Ricky.C

Tệp nên được gọi là extension_attribut.xml (số nhiều). Cố gắng gọi thế hệ của tất cả các thực thể được tạo tự động bằng CLI.
Alex Paliarush

xin lỗi vì lỗi đánh máy ở phần bình luận ở trên, tập tin tôi có thực sự là extension_attribut.xml
Ricky.C

Tôi đã googled nhưng không tìm thấy gì. Bạn có thể cho tôi biết nên sử dụng lệnh nào? Tôi là một người mới đến mà không quen thuộc với cli. Cảm ơn.
Ricky.C

2

Đừng quên rằng một mô-đun cần một register.phptệp trong đó và bạn phải sử dụng bin/magento module:enable VendorName_ModuleNametrước khi nó xuất hiện!

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.