J'ai ajouté un module de développement local (git repo séparé) à Magento 2 en utilisant des liens symboliques et cela fonctionnait bien jusqu'à ce que je frappe les modèles PHTML. Après un débogage intensif, j'ai découvert que la classe de système de fichiers Magento 2 ( Magento\Framework\Filesystem\Directory\Read
) utilise une isExists()
méthode combinée avec un getAbsolutePath()
appel pour voir si le modèle PHTML existe. Cependant, la getAbsolutePath()
méthode vérifie si le chemin d'accès relatif existe dans le système de fichiers Magento 2 et sinon, elle ajoute la racine Magento 2 à. il. Dans mon cas, le module vit dans un référentiel séparé /git/A
tandis que Magento vit /site/B
et ce comportement vérifie l'existence d'un modèle PHTML dans /site/B/git/A
.
En bref: les modèles PHTML qui vivent en dehors du système de fichiers racine Magento 2 ne sont pas récupérés, quel que soit le paramètre de configuration système "Autoriser les liens symboliques" activé. Il semble que le paramètre fonctionne, mais uniquement si la source du lien symbolique se trouve toujours dans le système de fichiers Magento 2.
Quelqu'un d'autre a-t-il rencontré cela? Quelle serait la meilleure façon de gérer le développement dans un référentiel git externe?
Réponses:
Solution de contournement si vous utilisez le référentiel de chemin du compositeur pour votre module.
En
registration.php
fait:Cela enregistrera votre module sous le chemin du lien symbolique dans le répertoire du fournisseur racine de Magento au lieu de son vrai chemin.
la source
/vagrant/app/code/Vendor/
vers/var/www/shop/app/code/Vendor
. Cela l'a résolu pour moi!Il devrait également être possible de manipuler le fichier registration.php pour pointer vers votre racine de développement.
Pour vous assurer qu'il est chargé, vous devez exécuter le fichier registration.php quelque part dans votre processus d'amorçage.
Le moyen le plus simple (sans l'installer via Composer) serait de l'ajouter manuellement au vendeur / Composer / Autoload_files.php.
J'ai aussi pensé à écrire un module pour ça. Ce module pourrait également être utile pour les environnements de test d'intégration (pour ajouter et supprimer des modules à la volée sans avoir à les copier quelque part).
=== MISE À JOUR ===
maintenant j'ai écrit le module: http://github.com/davidverholen/magento2-dynamic-component-registry
Je pense aussi qu'il devrait être possible de lier des modules en utilisant des liens symboliques relatifs
la source
Il est possible d'activer / autoriser les liens symboliques via les magasins => Configuration => Avancé => Développeur => Paramètres du modèle (comme dans Magento 1.x):
(Je n'ai pas testé si ce paramètre fonctionne)
Vous pouvez également utiliser des sous-modules, de cette façon, vous n'avez pas besoin de liens symboliques.
Pour le développement, je développe des modules dans un répertoire séparé et j'utilise PHPStorm pour les copier dans mon installation de développement de Magento 2.
la source
Si vous développez en utilisant PHP Storm, copiez simplement le deuxième référentiel dans la racine du projet Magento. Créez ensuite les liens symboliques nécessaires pour activer le module. PHP Storm traitera ce projet comme multiroot et reconnaîtra les deux référentiels. Vous pouvez choisir entre des stratégies de gestion de référentiel synchrones et asynchrones (par défaut) .
Ce problème se produit également lorsque EE (ou tout autre module) est lié à CE à l'aide de liens symboliques. La cause principale est que le
registration.php
chemin du module de base est calculé comme chemin réel vers le répertoire (dans votre cas, il est en dehors du projet Magento). C'est pourquoi le chemin relatif est calculé incorrectement, puis le chemin absolu est également incorrect. Si le deuxième référentiel est placé sous la racine Magento, le chemin relatif pointerait vers le vrai chemin du fichier (pas le lien symbolique), mais il serait toujours trouvé, donc tout fonctionnera.la source