Magento 2: Куда идут сторонние модули?

22

Я только что установил первый официальный релиз Magento 2. Я с удивлением обнаружил, что app/codeпапка исчезла

app/code

Это было как для версии, загруженной с веб-сайта, так и для версии, установленной через композитор. Кроме того, когда я попытался вручную создать app/codeпапку, а затем сделать, php bin/magento module:enable Pulsestorm_MyModuleчтобы включить образец модуля, я получил следующую ошибку

 Unknown module(s): 'Pulsestorm_MyModule'

Где должны жить сторонние модули? Если ответ «исходный репозиторий и установлен через композитор», как разработчик модулей должен структурировать свои модули, чтобы жить в репозитории Magento 2?

Алан Сторм
источник

Ответы:

18

Предпочтительно 3PLs будут жить в каталоге поставщиков вместе со всем остальным. Однако… :) Мы все знаем, что обычно есть собственный код, написанный почти для каждой пользовательской сборки сайта, и этот IMO принадлежит app / code / still. Да, вы все равно можете запустить модуль из приложения / кода.

Все модули, независимо от их местоположения, должны иметь файл composer.jsonи registration.phpфайл, которые используются для загрузки модуля в систему. Вам также нужен etc/modules.xmlфайл. Технически это все, что требуется для регистрации модуля:

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

2 directories, 3 files

Чтобы запустить модуль и запустить его, вам нужно запустить, setup:upgradeа затем cache:flushсистему распознать и загрузить новый компонент:

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

Обновление: два способа установки модуля из общедоступного репозитория GitHub: https://gist.github.com/davidalger/77761f13d9752b117f35

davidalger
источник
Я не нуждался в модуле: включить, если я не отключил его ранее. Есть ли параметр, который вы можете установить, чтобы установить расширение отключено?
Эйрик
@Eirik Если вы устанавливаете из репозитория через composer, это делает composer. Если вы просто разместите эти файлы там, тогда вам нужно включить его. По крайней мере, я почти уверен, что это то, что я нашел сразу после ГА, когда готовил слайды для выступления здесь в #phpworld :)
davidalger
Большое спасибо еще не подтолкнуло к репо, так как я работал на месте. Отличная информация.
Эйрик
6

Алан, они все еще входят app/code. Убедитесь, что у вас есть registration.phpв папке modulename, содержащей следующее:

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

Затем запустите:

php bin/magento setup:upgrade

Только что протестирован на свежем релизе Magento 2 CE и работает нормально.

Эйрик
источник
Спасибо @Eirik, это было действительно так. Было неясно, был ли файл registration.php проскочил, чего не должно было быть, или что-то, что сделало бы окончательный выпуск. Довольно ясно теперь :)
Алан Сторм