Saya ingin membungkus kepala saya menggunakan atribut ekstensi, misalnya untuk item kutipan.
Tidak ada masalah menambahkan atribut khusus ke entitas seperti itu menggunakan kelas penyetelan seperti di Magento 1, ini bukan tentang pertanyaan ini.
Saat ini keajaiban menguasai saya ketika saya ingin mengekspos atribut yang ditambahkan oleh ekstensi melalui entitas API sebagai atribut ekstensi.
UPDATE : Saya tahu bagaimana pabrik biasa dihasilkan. Pertanyaan ini adalah tentang pabrik khusus yang memberi contoh implementasi yang dihasilkan untuk antarmuka atribut ekstensi yang dihasilkan.
Inilah langkah-langkah yang saya ambil untuk membuatnya bekerja. Saya menambahkan ini sehingga siapa pun yang mencoba menjawab tidak perlu masuk ke detail itu.
Pertanyaan saya adalah BAGAIMANA atau MENGAPA berfungsi.
Langkah-langkah untuk mengekspos atribut ekstensi melalui API entitas:
- Buat
etc/extension_attributes.xml
yang menambahkan atribut ke antarmuka entitas - Buat plugin untuk menambahkan nilai atribut ke
ExtensionAttributes
instance entitas .
Untuk melakukan poin kedua, ExtensionAttributes
instance entitas diperlukan. Untuk alasan ini plugin bergantung pada pabrik, yang disediakan oleh manajer objek melalui DI.
Untuk contoh item kutipan Magento\Quote\Api\Data\CartItemExtensionFactory
harus digunakan.
Saya kira jenis pabrik ini entah bagaimana harus menjadi pemicu sihir generasi.
Magento kemudian menghasilkan antarmuka yang cocok \Magento\Quote\Api\Data\CartItemExtensionInterface
dengan setter dan getter untuk semua atribut ekstensi.
Namun, sepertinya tidak menghasilkan implementasi konkret untuk antarmuka itu. Setidaknya PHPStorm tidak melihatnya.
Bagaimana Magento mengumpulkan informasi yang diperlukan untuk menghasilkan kelas? Bagaimana metode antarmuka yang dihasilkan dapat dipanggil pada contoh konkret? Apakah ini kelas yang hanya dihasilkan dalam memori saja?
Saya senang itu berhasil, tapi itu tidak terlalu memuaskan. Kemampuan Magentos untuk menggunakan atribut yang dibuat secara otomatis oleh ekstensi adalah salah satu faktor kunci keberhasilannya. Sebagai pengembang modul, saya percaya saya perlu pemahaman menyeluruh tentang keseluruhan proses.
Jika saya punya waktu saya akan menggali sendiri, tetapi saya lebih suka jika saya bisa mendapatkan penjelasan.
UPDATE 2 : Butuh sedikit waktu untuk membaca \Magento\Framework\Api\Code\Generator\ExtensionAttributesInterfaceGenerator
dan \Magento\Framework\Api\Code\Generator\ExtensionAttributesGenerator
. Sekarang setidaknya saya punya ide kasar apa yang sedang terjadi. Jika tidak ada yang mengalahkan saya untuk itu saya akan menulis deskripsi proses penuh pada satu titik, karena saya pikir itu akan menjadi referensi yang bermanfaat.