Saya telah menambahkan modul pengembangan lokal (git repo terpisah) ke Magento 2 menggunakan tautan simbolis dan itu berfungsi dengan baik sampai saya menekan templat PHTML. Setelah debugging berat saya menemukan bahwa kelas sistem file Magento 2 ( Magento\Framework\Filesystem\Directory\Read
) menggunakan isExists()
metode yang dikombinasikan dengan getAbsolutePath()
panggilan untuk melihat apakah template PHTML ada. Namun, getAbsolutePath()
metode ini memeriksa apakah path relatif ada di dalam sistem file Magento 2 dan jika tidak, ia akan melanjutkan root Magento 2. Itu. Dalam kasus saya, modul tinggal di repo terpisah /git/A
sementara Magento tinggal /site/B
dan perilaku ini memeriksa keberadaan templat PHTML di /site/B/git/A
.
Singkatnya: Templat PHTML yang hidup di luar sistem file root Magento 2 tidak diambil, terlepas dari pengaturan Konfigurasi Sistem "Izinkan Symlinks" dihidupkan. Tampaknya pengaturan berfungsi, tetapi hanya jika sumber symlink masih dalam sistem file Magento 2.
Adakah orang lain yang mengalami ini? Apa yang akan menjadi cara terbaik untuk menangani pengembangan dalam repo git eksternal?
Jawaban:
Meretas solusi jika Anda menggunakan repositori jalur komposer untuk modul Anda.
Di tempat
registration.php
:Ini akan mendaftarkan modul Anda di bawah jalur yang disinkronkan di dir vendor root Magento alih-alih jalur aslinya.
sumber
/vagrant/app/code/Vendor/
dengan/var/www/shop/app/code/Vendor
. Ini menyelesaikannya untuk saya!Seharusnya dimungkinkan untuk memanipulasi registrasi.php agar mengarah ke root dev Anda.
Untuk memastikan itu dimuat, Anda harus menjalankan registrasi.php di suatu tempat dalam proses bootstrap Anda.
Cara termudah (tanpa menginstalnya melalui komposer) adalah dengan menambahkannya secara manual ke vendor / komposer / autoload_files.php.
Saya juga berpikir tentang menulis modul untuk ini. Modul ini juga dapat Berguna untuk lingkungan uji integrasi (untuk menambah dan menghapus modul dengan cepat tanpa harus menyalinnya di suatu tempat).
=== UPDATE ===
sekarang saya menulis modul: http://github.com/davidverholen/magento2-dynamic-component-registry
juga saya pikir itu mungkin untuk menghubungkan modul menggunakan symlink relatif
sumber
Dimungkinkan untuk mengaktifkan / memperbolehkan symlink melalui Store => Configuration => Advanced => Developer => Pengaturan Template (seperti di Magento 1.x):
(Saya tidak menguji apakah pengaturan ini berfungsi)
Anda juga dapat menggunakan submodul, dengan cara ini Anda tidak perlu symlink.
Untuk pengembangan, saya mengembangkan modul dalam direktori terpisah dan menggunakan PHPStorm untuk menyalinnya ke dalam pengembangan instalasi Magento 2.
sumber
Jika Anda mengembangkan menggunakan PHP Storm, cukup salin repositori kedua ke root proyek Magento. Kemudian buat symlink yang diperlukan untuk mengaktifkan modul. PHP Storm akan memperlakukan proyek ini sebagai multiroot dan akan mengenali kedua repositori. Anda dapat memilih antara strategi manajemen repositori sinkron dan asinkron (default) .
Masalah ini juga terjadi ketika EE (atau modul lainnya) ditautkan ke CE menggunakan symlink. Akar penyebabnya adalah yang
registration.php
menghitung jalur modul dasar sebagai jalur nyata ke direktori (dalam kasus Anda ini berada di luar proyek Magento). Itulah sebabnya jalur relatif dihitung secara salah, dan kemudian jalur absolut juga salah. Jika repositori kedua diletakkan di bawah root Magento, path relatif akan menunjuk ke path file nyata (bukan symlink), tetapi masih akan ditemukan, jadi semuanya akan berfungsi.sumber