Magento 2 Enterprise: Neues Modul im Herstellerverzeichnis erstellen

17

Ich habe versucht, vendorin Magento Enterprise 2.0.0 ein neues Modul im Verzeichnis zu erstellen . Das Modul konnte nicht geladen werden, nachdem ich das Magento ausgeführt habe setup:upgrade.

Wenn ich meine Dateien in das app/codeVerzeichnis verschiebe, wird das Modul erfolgreich eingerichtet.

In der Magento 2 Enterprise Edition befinden sich alle Module im vendorVerzeichnis, in der Community Edition wird jedoch das app/codeVerzeichnis verwendet. Ich frage mich, ob es möglich ist, benutzerdefinierte Module im vendorVerzeichnis zu erstellen . Wenn ja, was sind die Unterschiede zwischen dem Erstellen eines benutzerdefinierten Moduls in app/codeund 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>
Jason Yip
quelle
Sind Sie sicher, dass Sie Enterprise-Module im Herstellerverzeichnis behalten müssen?
Valery Statichnyi
Entschuldigung, ich verstehe nicht, was Sie meinen, da ich das Magento 2 Enterprise-Paket heruntergeladen habe und alle Module im Herstellerverzeichnis gespeichert wurden, unabhängig davon, ob es sich um ein Kernmodul oder ein Enterprise-Modul handelt. Sogar das Magento-Framework wird im Herstellerverzeichnis gespeichert. Im Originalpaket war kein App / Code-Verzeichnis vorhanden.
Jason Yip
Darf ich fragen, was der Eintrag "psr-4" in Ihrer composer.json bewirkt? Wir verwenden Verpackungen, haben aber unser eigenes GitLab, sodass wir auch im Herstellercode arbeiten müssen, mein Code wird jedoch nicht erkannt. Ich kann meine Klasse aus Magento-Kernmodulen instanziieren, aber Cron funktioniert nicht. Ich denke, es hat mit Autoloading zu tun, meine Dateien werden nicht gelesen. Ich habe eine Klasse Company\Reviews\Cron\Checkin der Datei /vendor/company/Reviews/Cron/Check.phpund ich habe einen Cronjob wie, Company\Reviews\Cron\Checkaber in der Datenbank heißt cron_schedulees nur "Class Company \ Reviews \ Cron \ Check existiert nicht"
Jacques

Antworten:

11

Benutzerdefinierte Module sollten nicht im vendorVerzeichnis entwickelt werden. Kopieren Sie den Inhalt vendor/magento/magento2-basein das Stammverzeichnis des Projekts und erstellen Sie eine benutzerdefinierte Datei.gitignore wie hier beschrieben , und initialisieren Sie das neue Git-Repository. Dann entwickeln Sie ein benutzerdefiniertes Modul unter app/code/VendorName/ModuleName.

Wenn Sie das Modul später vertreiben möchten, muss es gepackt und veröffentlicht werden . Wenn jemand Ihr Modul kauft / installiert, wird es vom Komponisten automatisch in das vendorVerzeichnis seines Projekts installiert .

Alex Paliarush
quelle