Ich habe Magento 2 mithilfe symbolischer Links ein lokales Entwicklungsmodul (separates Git-Repo) hinzugefügt, und es hat einwandfrei funktioniert, bis ich auf die PHTML-Vorlagen gestoßen bin. Nach langem Debuggen stellte ich fest, dass die Magento 2-Dateisystemklasse ( Magento\Framework\Filesystem\Directory\Read
) eine isExists()
Methode verwendet, die mit einem getAbsolutePath()
Aufruf kombiniert wird , um festzustellen, ob die PHTML-Vorlage vorhanden ist. Die getAbsolutePath()
Methode prüft jedoch, ob der relative Pfad im Magento 2-Dateisystem vorhanden ist. Andernfalls wird das Magento 2-Stammverzeichnis vorangestellt. es. In meinem Fall befindet sich das Modul in einem separaten Repo, /git/A
während Magento darin lebt, /site/B
und dieses Verhalten überprüft, ob eine PHTML-Vorlage in vorhanden ist /site/B/git/A
.
Kurz gesagt: PHTML-Vorlagen, die sich außerhalb des Magento 2-Root-Dateisystems befinden, werden unabhängig von der aktivierten Systemkonfigurationseinstellung "Symlinks zulassen" nicht erfasst. Es scheint, dass die Einstellung funktioniert, aber nur, wenn sich die Quelle des Symlinks noch im Magento 2-Dateisystem befindet.
Hat das noch jemand erlebt? Was wäre der beste Weg, um die Entwicklung in einem externen Git-Repo zu handhaben?
Antworten:
Hackische Problemumgehung, wenn Sie das Composer Path Repository für Ihr Modul verwenden.
In
registration.php
put:Dadurch wird Ihr Modul unter dem verknüpften Pfad im Magento-Stammanbieterverzeichnis anstelle des tatsächlichen Pfads registriert.
quelle
/vagrant/app/code/Vendor/
mit/var/www/shop/app/code/Vendor
. Das hat es für mich gelöst!Es sollte auch möglich sein, die Datei register.php so zu manipulieren, dass sie auf Ihr Dev-Root verweist.
Um sicherzustellen, dass es geladen wird, müssten Sie die Datei register.php irgendwo in Ihrem Bootstrap-Prozess ausführen.
Der einfachste Weg (ohne es über Composer zu installieren) wäre, es manuell zur Datei vendor / composer / autoload_files.php hinzuzufügen.
Ich habe auch darüber nachgedacht, ein Modul dafür zu schreiben. Dieses Modul kann auch für Integrationstestumgebungen nützlich sein (zum Hinzufügen und Entfernen von Modulen im laufenden Betrieb, ohne sie irgendwo kopieren zu müssen).
=== UPDATE ===
Inzwischen habe ich das Modul geschrieben: http://github.com/davidverholen/magento2-dynamic-component-registry
Ich denke auch, dass es möglich sein sollte, Module mit relativen Symlinks zu verknüpfen
quelle
Es ist möglich, Symlinks über die Stores zu aktivieren / zulassen => Konfiguration => Erweitert => Entwickler => Vorlageneinstellungen (genau wie in Magento 1.x):
(Ich habe nicht getestet, ob diese Einstellung funktioniert)
Sie können auch Submodule verwenden, so dass Sie keine Symlinks benötigen.
Für die Entwicklung entwickle ich Module in einem separaten Verzeichnis und kopiere sie mit PHPStorm in meine Entwicklungsinstallation von Magento 2.
quelle
Wenn Sie mit PHP Storm entwickeln, kopieren Sie einfach das zweite Repository in das Magento-Projektstammverzeichnis. Erstellen Sie dann die erforderlichen Symlinks, um das Modul zu aktivieren. PHP Storm behandelt dieses Projekt als mehrwurzelig und erkennt beide Repositorys. Sie können zwischen synchronen und asynchronen (Standard-) Repository-Verwaltungsstrategien wählen .
Dieses Problem tritt auch auf, wenn EE (oder ein anderes Modul) über Symlinks mit CE verbunden ist. Die Hauptursache ist, dass der
registration.php
Basismodulpfad als realer Pfad zum Verzeichnis berechnet wird (in Ihrem Fall außerhalb des Magento-Projekts). Aus diesem Grund wird der relative Pfad falsch berechnet, und dann ist auch der absolute Pfad falsch. Wenn das zweite Repository unter Magento root gestellt wird, verweist der relative Pfad auf den tatsächlichen Dateipfad (nicht auf den Symlink), wird jedoch weiterhin gefunden, sodass alles funktioniert.quelle