Magento 2 Enterprise: создание нового модуля в каталоге поставщиков

17

Я пытался создать новый модуль в vendorкаталоге в Magento Enterprise 2.0.0. Модуль не может быть загружен после того, как я запустил Magento setup:upgrade.

Если я переместлю мои файлы в app/codeкаталог, модуль будет успешно установлен.

В версии Magento 2 Enterprise все модули находятся в vendorкаталоге, но версия Community использует app/codeкаталог. Интересно, можно ли создать пользовательский модуль в vendorкаталоге. Если да, в чем разница между созданием пользовательского модуля в app/codeи vendor.

vendor/Test/Testing/registration.php

<?php

\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Test_Testing',
    __DIR__ );

vendor/Test/Testing/composer.json

{   "name": "test/testing",   "description": "Testing",   "require": {
    "php": "~5.5.0|~5.6.0|~7.0.0",
    "magento/framework": "100.0.*"   },   "type": "magento2-module",   "version": "0.1.0",   "license": [
    "proprietary"   ],   "autoload": {
    "files": [ "registration.php" ],
    "psr-4": {
      "Test\\Testing\\": ""
    }   } }

vendor/Test/Testing/etc/module.xml

<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Test_Testing" setup_version="0.1.0">
    </module> </config>
Джейсон Йип
источник
Вы уверены, что вам нужно хранить корпоративные модули в каталоге поставщиков?
Валерий Статичный
Извините, я не понимаю, что вы имеете в виду, потому что я скачал пакет Magento 2 Enterprise, и все модули были сохранены в каталоге поставщика, независимо от того, является ли это основной модуль или модуль Enterprise. Даже Magento Framework хранится в каталоге поставщиков. В исходном пакете не было каталога app / code.
Джейсон Ип
Могу я спросить, что делает элемент "psr-4" в вашем composer.json? Мы используем упаковку, но у нас есть собственный GitLab, поэтому мы должны кодировать и вендора, однако мой код не распознается. Я могу создать свой класс из основных модулей Magento, но Cron не работает. Я думаю, что это связано с автозагрузкой, мои файлы не читаются. У меня есть класс Company\Reviews\Cron\Checkв файле, /vendor/company/Reviews/Cron/Check.phpи у меня есть cronjob, Company\Reviews\Cron\Checkно в базе данных cron_scheduleпросто написано "Class Company \ Reviews \ Cron \ Check не существует"
Жак

Ответы:

11

Пользовательские модули не должны разрабатываться в vendorкаталоге. Скопируйте содержимое vendor/magento/magento2-baseв корневой каталог проекта, создайте пользовательский, .gitignoreкак описано здесь, и инициализируйте новый репозиторий git. Затем разработайте пользовательский модуль под app/code/VendorName/ModuleName.

Позже, когда вы решите распространить модуль, его нужно будет упаковать и опубликовать . Когда кто-то купит / установит ваш модуль, он будет автоматически установлен композитором в vendorкаталог своего проекта.

Алекс Палиаруш
источник