Magento 2 berisi sejumlah file kelas yang sudah dibuat sebelumnya, atau dibuat dengan cepat. Mereka tinggal di
var/generated
File-file yang dihasilkan ini termasuk kelas pabrik. Dari dokumentasi , saya memahami bahwa seorang programmer menggunakan kelas pabrik untuk instantiate objek "non-injeksi". Objek "non-injeksi" adalah objek yang tidak dapat ditambahkan melalui __constructor
injeksi dependensi, biasanya karena membutuhkan input pengguna untuk instantiate.
Apa yang tidak jelas dari dokumentasi adalah bagaimana Magento 2 tahu bahwa itu perlu untuk menghasilkan kelas pabrik. Ini sedikit
Jika pabrik yang tidak ada ditemui oleh manajer objek dalam mode runtime atau kompiler, manajer objek menghasilkan pabrik.
membuatnya terdengar seperti jika saya menggunakan kelas pabrik di manajer objek (atau, dengan ekstensi, dalam injeksi dependensi __constructors), bahwa Magento 2 akan menghasilkannya untuk saya. Tetapi bagaimana manajer objek tahu bahwa hal yang saya minta adalah pabrik?
Juga, tampaknya ada dua perintah untuk secara otomatis menghasilkan (atau "mengkompilasi") semua kelas yang dihasilkan. Menjalankan salah satu dari perintah ini menghasilkan sejumlah besar kelas Factory. Apa konfigurasi dan / atau file kode yang dilihat oleh perintah-perintah ini untuk menghasilkan objek pabrik yang dibutuhkan?
Saya tahu bahwa melacak manajer objek dan / atau kode perintah sepanjang jalan akan mengungkapkan ini, tapi saya berharap untuk menghindari perjalanan yang panjang dan sulit itu.
sumber
Saya menggali sup kacang yang sama ini sekarang. Pemahaman saya sejauh ini adalah bahwa semua hal yang dihasilkan secara otomatis
/var/generation
dilakukan dari preferensi dan antarmuka yang dinyatakan dalamapp/etc/di.xml
.Antarmuka dan preferensi Anda akan dinyatakan dalam
di.xml
file di/app/code/Vendor/<module>/etc/di.xml
.Ia tahu untuk menghasilkan objek untuk Anda karena Anda telah mendeklarasikan antarmuka di
__constructor
AND Anda dan telah menyatakan preferensi untuk antarmuka itu baik secara global maupun lokal dalamdi.xml
file yang sesuai .Saya menawarkan tiga butir garam dengan komentar saya.
sumber
di.xml
file - Anda dapat mengirim sesuatu ke manajer objek yang berakhir di Pabrik dan itu akan menghasilkan file untuk Anda.