Magento 2: où vont les modules tiers?

22

Je viens d'installer la première version officielle de Magento 2. J'ai été surpris de constater que le app/codedossier avait disparu

app/code

Il s'agissait à la fois de la version téléchargée à partir du site Web et de la version installée via composer. De plus, lorsque j'ai essayé de créer manuellement le app/codedossier, puis de faire un php bin/magento module:enable Pulsestorm_MyModulepour activer un exemple de module, j'ai eu l'erreur suivante

 Unknown module(s): 'Pulsestorm_MyModule'

Où les modules tiers sont-ils censés vivre? Si la réponse est "un référentiel source et installé via Composer", comment un développeur de modules doit-il structurer ses modules pour vivre dans un référentiel Magento 2?

Alan Storm
la source

Réponses:

18

De préférence, les 3PL vivront dans le répertoire des fournisseurs avec tout le reste. Cependant… :) Nous savons tous qu'il existe généralement du code personnalisé écrit pour presque tous les sites de construction personnalisés, et cet IMO appartient à app / code / still. Oui, vous pouvez toujours exécuter un module à partir de l'application / du code.

Tous les modules, quel que soit leur emplacement, doivent avoir un composer.jsonet un registration.phpfichier qui sont utilisés pour introduire le module dans le système. Vous avez également besoin du etc/modules.xmlfichier. C'est, techniquement, tout ce qu'il faut pour enregistrer un module:

$ tree app/code/Alger/
app/code/Alger/
└── Skeleton
    ├── composer.json
    ├── etc
       └── module.xml
    └── registration.php

2 directories, 3 files

Pour que le module soit opérationnel, vous devez exécuter setup:upgrade, puis cache:flushque le système reconnaisse et charge votre nouveau composant:

$ bin/magento module:enable Foo_Bar
$ bin/magento setup:upgrade -q && bin/magento cache:flush -q

Mise à jour: deux méthodes pour installer le module à partir du référentiel GitHub public: https://gist.github.com/davidalger/77761f13d9752b117f35

davidalger
la source
Je n'ai pas eu besoin de module: activer sauf si je l'ai précédemment désactivé. Y a-t-il un paramètre que vous pouvez définir pour installer l'extension désactivée?
Eirik
@Eirik Si vous installez depuis le dépôt via le compositeur, c'est fait par le compositeur. Si vous placez simplement ces fichiers là, c'est à ce moment que vous devez l'activer. Au moins, je suis presque sûr que c'est ce que j'ai trouvé juste après l'AG alors que je peaufinais les diapositives pour une conférence ici à #phpworld :)
davidalger
merci beaucoup n'ont pas encore poussé au repo car je travaillais localement. Grande information.
Eirik
6

Alan, ils entrent toujours app/code. Assurez-vous d'en avoir un registration.phpdans le dossier modulename contenant les éléments suivants:

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Namespace_Modulename',
    __DIR__
);

Exécutez ensuite:

php bin/magento setup:upgrade

Juste testé sur la nouvelle version de Magento 2 CE et fonctionne correctement.

Eirik
la source
Merci @Eirik, c'était bien ça. Il n'était pas clair si registration.php était quelque chose qui aurait dû se passer, ou quelque chose qui ferait la version finale. Assez clair maintenant :)
Alan Storm