Я добавил локальный модуль разработки (отдельный репозиторий git) в Magento 2, используя символические ссылки, и он работал нормально, пока я не попал в шаблоны PHTML. После тяжелой отладки я обнаружил, что класс файловой системы Magento 2 ( Magento\Framework\Filesystem\Directory\Read
) использует isExists()
метод в сочетании с getAbsolutePath()
вызовом, чтобы проверить, существует ли шаблон PHTML. Тем не менее, getAbsolutePath()
метод проверяет, существует ли относительный путь в файловой системе Magento 2, и если нет, он добавляет к корню Magento 2. Это. В моем случае модуль живет в отдельном репо, в /git/A
то время как Magento живет, /site/B
и это поведение проверяет наличие шаблона PHTML в /site/B/git/A
.
Вкратце: шаблоны PHTML, которые находятся за пределами корневой файловой системы Magento 2, не выбираются, независимо от того, включен ли параметр конфигурации системы «Разрешить символические ссылки». Кажется, что настройка работает, но только если источник символической ссылки все еще находится в файловой системе Magento 2.
Кто-нибудь еще сталкивался с этим? Каков наилучший способ управления разработкой во внешнем git-репо?
Ответы:
Хакерский обходной путь, если вы используете репозиторий пути композитора для вашего модуля.
На
registration.php
месте:Это зарегистрирует ваш модуль по символической ссылке в директории корневого вендора Magento вместо его реального пути.
источник
/vagrant/app/code/Vendor/
на/var/www/shop/app/code/Vendor
. Это решило это для меня!Также должна быть возможность манипулировать registration.php, чтобы он указывал на ваш корень разработчика.
Чтобы убедиться, что он загружается, вам нужно выполнить файл registration.php где-нибудь в процессе начальной загрузки.
Самый простой способ (без его установки через composer) - добавить его вручную в vendor / composer / autoload_files.php.
Я также думал о написании модуля для этого. Этот модуль также может быть полезен для интеграционных тестовых сред (для добавления и удаления модулей на лету без необходимости их где-либо копировать).
=== UPDATE ===
К настоящему времени я написал модуль: http://github.com/davidverholen/magento2-dynamic-component-registry
также я думаю, что должно быть возможно связать модули, используя относительные ссылки
источник
Можно включить / разрешить символические ссылки через магазины => Конфигурация => Дополнительно => Разработчик => Настройки шаблона (как в Magento 1.x):
(Я не проверял, работает ли этот параметр)
Также вы можете использовать подмодули, таким образом, вам не нужны символические ссылки.
Для разработки я разрабатываю модули в отдельном каталоге и использую PHPStorm, чтобы скопировать их в мою разрабатываемую версию Magento 2.
источник
Если вы разрабатываете с использованием PHP Storm, просто скопируйте второй репозиторий в корень проекта Magento. Затем создайте необходимые символические ссылки для включения модуля. PHP Storm будет рассматривать этот проект как многокорневый и распознает оба репозитория. Вы можете выбрать между синхронной и асинхронной (по умолчанию) стратегиями управления хранилищем .
Эта проблема также возникает, когда EE (или любой другой модуль) связан с CE с помощью символических ссылок. Основная причина заключается в том, что
registration.php
базовый путь к модулю вычисляется как реальный путь к каталогу (в вашем случае он находится за пределами проекта Magento). Вот почему относительный путь рассчитывается неправильно, а значит, и абсолютный путь тоже неверен. Если второй репозиторий помещен в корневой каталог Magento, относительный путь будет указывать на реальный путь к файлу (не символическую ссылку), но он все равно будет найден, поэтому все будет работать.источник