Dodałem lokalny moduł programistyczny (osobne repozytorium git) do Magento 2 za pomocą dowiązań symbolicznych i działał dobrze, dopóki nie trafiłem na szablony PHTML. Po intensywnym debugowaniu dowiedziałem się, że klasa systemu plików Magento 2 ( Magento\Framework\Filesystem\Directory\Read
) używa isExists()
metody połączonej z getAbsolutePath()
wywołaniem, aby sprawdzić, czy istnieje szablon PHTML. Jednak getAbsolutePath()
metoda sprawdza, czy ścieżka względna istnieje w systemie plików Magento 2, a jeśli nie, zastępuje katalog główny Magento 2. to. W moim przypadku moduł żyje w osobnym repozytorium, /git/A
podczas gdy Magento żyje, /site/B
a to zachowanie sprawdza obecność szablonu PHTML w /site/B/git/A
.
Krótko mówiąc: szablony PHTML, które działają poza głównym systemem plików Magento 2, nie są pobierane, niezależnie od tego, czy włączone jest ustawienie konfiguracji systemu „Zezwalaj na dowiązania symboliczne”. Wygląda na to, że ustawienie działa, ale tylko wtedy, gdy źródło dowiązania symbolicznego nadal znajduje się w systemie plików Magento 2.
Czy ktoś jeszcze tego doświadczył? Jaki byłby najlepszy sposób obsługi rozwoju w zewnętrznym repozytorium git?
Odpowiedzi:
Hackish obejście, jeśli używasz repozytorium ścieżki kompozytora dla swojego modułu.
W
registration.php
zestawie:Spowoduje to zarejestrowanie modułu pod dowiązaniem symbolicznym w katalogu głównego dostawcy Magento zamiast jego rzeczywistej ścieżki.
źródło
/vagrant/app/code/Vendor/
do/var/www/shop/app/code/Vendor
. To rozwiązało dla mnie!Powinna istnieć także możliwość manipulowania plikiem register.php, aby wskazać katalog główny użytkownika.
Aby upewnić się, że się ładuje, musisz wykonać plik register.php gdzieś w procesie ładowania.
Najłatwiejszym sposobem (bez instalowania go za pomocą kompozytora) byłoby dodanie go ręcznie do dostawcy / composer / autoload_files.php.
Pomyślałem także o napisaniu modułu do tego. Ten moduł może być również przydatny w środowiskach testowych integracji (do dodawania i usuwania modułów w locie bez konieczności ich gdzieś kopiowania).
=== AKTUALIZACJA ===
do tej pory napisałem moduł: http://github.com/davidverholen/magento2-dynamic-component-registry
także myślę, że powinno być możliwe łączenie modułów za pomocą względnych dowiązań symbolicznych
źródło
Możliwe jest włączenie / zezwolenie dowiązań symbolicznych przez Sklepy => Konfiguracja => Zaawansowane => Deweloper => Ustawienia szablonu (tak jak w Magento 1.x):
(Nie testowałem, czy to ustawienie działa)
Możesz także używać submodułów, dzięki czemu nie potrzebujesz dowiązań symbolicznych.
W celu programowania tworzę moduły w osobnym katalogu i używam PHPStorm, aby skopiować je do mojej instalacji programistycznej Magento 2.
źródło
Jeśli tworzysz za pomocą PHP Storm, po prostu skopiuj drugie repozytorium do katalogu głównego projektu Magento. Następnie utwórz niezbędne dowiązania symboliczne, aby włączyć moduł. PHP Storm potraktuje ten projekt jako multirootowany i rozpozna oba repozytoria. Możesz wybierać między strategiami zarządzania repozytoriami synchronicznymi i asynchronicznymi (domyślne) .
Ten problem występuje również wtedy, gdy EE (lub dowolny inny moduł) jest połączony z CE za pomocą dowiązań symbolicznych. Główną przyczyną jest to, że
registration.php
oblicza ścieżkę modułu podstawowego jako rzeczywistą ścieżkę do katalogu (w twoim przypadku jest to poza projektem Magento). Dlatego ścieżka względna jest obliczana niepoprawnie, a następnie ścieżka bezwzględna jest również niepoprawna. Jeśli drugie repozytorium zostanie umieszczone w katalogu głównym Magento, ścieżka względna wskazywałaby na rzeczywistą ścieżkę do pliku (nie dowiązanie symboliczne), ale nadal byłaby znaleziona, więc wszystko będzie działać.źródło