Agregué un módulo de desarrollo local (repositorio git separado) a Magento 2 usando enlaces simbólicos y funcionó bien hasta que llegué a las plantillas PHTML. Después de una fuerte depuración descubrí que la clase de sistema de archivos Magento 2 ( Magento\Framework\Filesystem\Directory\Read
) usa un isExists()
método combinado con una getAbsolutePath()
llamada para ver si existe la plantilla PHTML. Sin embargo, el getAbsolutePath()
método verifica si la ruta relativa existe dentro del sistema de archivos Magento 2 y si no, antepone la raíz de Magento 2. eso. En mi caso, el módulo vive en un repositorio separado /git/A
mientras Magento vive /site/B
y este comportamiento verifica la existencia de una plantilla PHTML en /site/B/git/A
.
En resumen: las plantillas PHTML que viven fuera del sistema de archivos raíz de Magento 2 no se seleccionan, independientemente de que la configuración del sistema "Permitir enlaces simbólicos" esté activada. Parece que la configuración está funcionando, pero solo si la fuente del enlace simbólico todavía está dentro del sistema de archivos Magento 2.
¿Alguien más ha encontrado esto? ¿Cuál sería la mejor manera de manejar el desarrollo en un repositorio de git externo?
Respuestas:
Solución alternativa si está utilizando el repositorio de ruta del compositor para su módulo.
En
registration.php
poner:Esto registrará su módulo bajo ruta simbólica en el directorio de proveedores raíz de Magento en lugar de su ruta real.
fuente
/vagrant/app/code/Vendor/
a/var/www/shop/app/code/Vendor
. ¡Esto lo resolvió para mí!También debería ser posible manipular el registro.php para apuntar a su raíz de desarrollo.
Para asegurarte de que se esté cargando, deberías ejecutar el registro.php en algún lugar de tu proceso de arranque.
La forma más fácil (sin instalarlo a través de Composer) sería agregarlo manualmente a vendor / composer / autoload_files.php.
También pensé en escribir un módulo para esto. Este módulo también podría ser útil para entornos de prueba de integración (para agregar y eliminar módulos sobre la marcha sin tener que copiarlos en algún lugar).
=== ACTUALIZACIÓN ===
ahora escribí el módulo: http://github.com/davidverholen/magento2-dynamic-component-registry
También creo que debería ser posible vincular módulos utilizando enlaces simbólicos relativos
fuente
Es posible habilitar / permitir enlaces simbólicos a través de Tiendas => Configuración => Avanzado => Desarrollador => Configuración de plantilla (al igual que en Magento 1.x):
(No probé si esta configuración funciona)
También puede usar submódulos, de esta manera no necesita enlaces simbólicos.
Para el desarrollo, desarrollo módulos en un directorio separado y uso PHPStorm para copiarlos en mi instalación de desarrollo de Magento 2.
fuente
Si desarrolla utilizando PHP Storm, simplemente copie el segundo repositorio a la raíz del proyecto Magento. Luego cree los enlaces simbólicos necesarios para habilitar el módulo. PHP Storm tratará este proyecto como multirraíz y reconocerá ambos repositorios. Puede elegir entre estrategias de administración de repositorios síncronas y asíncronas (predeterminadas) .
Este problema también ocurre cuando EE (o cualquier otro módulo) está vinculado a CE mediante enlaces simbólicos. La causa raíz es que
registration.php
calcula la ruta del módulo base como ruta real al directorio (en su caso, está fuera del proyecto Magento). Es por eso que la ruta relativa se calcula incorrectamente, y luego la ruta absoluta también es incorrecta. Si el segundo repositorio se coloca bajo la raíz de Magento, la ruta relativa apuntaría a la ruta real del archivo (no al enlace simbólico), pero aún se encontraría, por lo que todo funcionará.fuente