Maak een nieuwe module | Handleiding voor Adobe Commerce-ontwikkelaars


Bijdragen via pull-verzoeken worden niet ondersteund voor dit onderwerp. Open een GitHub-probleem om feedback te geven.

Module is een structureel element van Magento 2 – het hele systeem is gebouwd op modules. Meestal is de eerste stap bij het maken van een aanpassing het bouwen van een module.

Om een ​​module te maken, moet u de volgende stappen op hoog niveau uitvoeren:

  1. Maak de modulemap aan.
  2. Maak de etc/module.xml het dossier.
  3. Maak de registration.php het dossier.
  4. Voer de … uit bin/magento setup:upgrade script om de nieuwe module te installeren.
  5. Controleer of de module werkt.

Laten we elk van deze stappen in detail doornemen.

Maak de modulemap aan

Er zijn twee mogelijke locaties voor modules in Magento 2: de app/code-map en de leveranciersmap

Afhankelijk van hoe Magento 2 is geïnstalleerd, kunnen kernmodules ofwel in de vendor/magento/magento-*mappen (voor installatie van Composer) of in de app/code/Magento/ map (voor het klonen van GitHub).

Welke van deze locaties moet u kiezen voor uw nieuwe module?

Als je een module voor een specifiek project bouwt, kun je het beste de app/code-map kiezen en je committeren aan de repository van het project.

Als u een extensie bouwt om opnieuw te gebruiken, is het beter om componist te gebruiken om deze te maken en uw module in de vendor/<YOUR_VENDOR>/module-something map.

Elke modulenaam in Magento 2 bestaat uit twee delen: de leverancier en de module zelf. Met andere woorden, modules zijn gegroepeerd in leveranciers, dus u moet de leveranciers- en modulenamen definiëren. Laten we voor dit voorbeeld de leverancier “Leren” en de module “FirstUnit” noemen.

Laten we de map app/code/Learning maken en in deze map een andere map plaatsen: FirstUnit. Als u de opdrachtregel gebruikt, zou de code zijn:

  1. cd naar de hoofdmap
  2. mkdir app/code/Learning
  3. mkdir app/code/Learning/FirstUnit

Zorg ervoor dat je toestemming hebt om bestanden en mappen te maken in je installatie

Vervolgens moet u een maken etc/module.xml het dossier. Dit bestand is vereist om de module te laten bestaan.

Dit bestand bevat de volgende informatie:

  • Module naam
  • Moduleversie
  • afhankelijkheden

De modulenaam wordt gedefinieerd door de mappen die we zojuist hebben gemaakt, omdat in Magento 2 klassenamen de mapstructuur moeten volgen. Omdat we de mappen hebben gemaakt Learning/FirstUnit, onze modulenaam wordt Learning_FirstUnit en alle klassen die bij deze module horen, beginnen met LearningFirstUnit – bijvoorbeeld: LearningFirstUnitObserverTest.

Moduleversie geeft de huidige versie van het databaseschema en de gegevens aan en wordt gebruikt bij het upgraden. Stel bijvoorbeeld dat u besluit het schema van een tabel in uw module te wijzigen. Hoe weet u zeker dat deze wijziging wordt doorgevoerd in alle gevallen waarin de code wordt geïmplementeerd? Het wijzigen van de database door directe SQL-query’s zal niet werken. In plaats daarvan heeft Magento 2 installatie- en upgradescripts in elke module (optioneel). Deze scripts bevatten opdrachten om het databaseschema of de gegevens te wijzigen. Om bij te houden of een script wel of niet moet worden uitgevoerd, gebruikt Magento 2 moduleversies. Elke keer dat u een nieuwe databasewijziging implementeert, implementeert u een nieuwe versie van een module en wijzigt u de bijbehorende module.xml. Magento slaat de huidige moduleversie op in een database, en als de databasewaarde en die in de module.xml niet overeenkomen, wordt de upgradecode uitgevoerd.

afhankelijkheden. Als de ene module afhankelijk is van de andere, module.xml bestand zal een speciale verklaring hebben die een lijst met modules definieert waarvan de huidige module afhankelijk is. Voor dit voorbeeld zullen we onze module afhankelijk maken van Magento_Catalog.

Gebruik de volgende opdrachtregelcode om de map te maken: app/code/Learning/FirstUnit/etc:

1
mkdir app/code/Learning/FirstUnit/etc

Zet er dan de volgende code in:

1
2
3
4
5
6
7
8
<?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="Learning_FirstUnit" setup_version="0.0.1">
        <sequence>
            <module name="Magento_Catalog"/>
        </sequence>
    </module>
</config>

Merk op dat in het XML-bestand dat we hebben gespecificeerd:

  • Module naam: Learning_FirstUnit (gebaseerd op de mappen die we hebben gemaakt)
  • Versie: 0.0.1 (eerste versie van onze module)
  • Afhankelijkheid: Magento_Catalog. We kunnen meerdere afhankelijkheden hebben. In dit geval zouden we <module name=”..” /> knooppunten onder het sequentieknooppunt.

Maak het bestand registration.php aan

Elke module moet dit bestand hebben, dat Magento vertelt hoe de module te lokaliseren. Voortzetting van ons voorbeeld, maak het bestand
app/code/Learning/FirstUnit/registration.php. Zet er dan de volgende inhoud in:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */

use MagentoFrameworkComponentComponentRegistrar;

ComponentRegistrar::register(
    ComponentRegistrar::MODULE,
    'Learning_FirstUnit',
    __DIR__
);

De registration.php is een gestandaardiseerd bestand dat voor alle modules hetzelfde patroon volgt.

Het enige dat varieert, is de modulenaam, wat in ons geval is Learning_FirstUnit.

Voer de opdracht “setup:upgrade” uit

Als u dit commando uitvoert, wordt uw nieuwe module actief en wordt Magento op de hoogte gebracht van zijn aanwezigheid.

1
php bin/magento setup:upgrade

Het zou een grote hoeveelheid uitvoer moeten echoën, waarvan één regel zou moeten zijn: Learning_FirstUnit. Controleer of deze regel code aanwezig is.

Controleer of de nieuwe module actief is

Tot nu toe hebben we geen bruikbare code aan onze module toegevoegd – deze is nog steeds leeg (en dus onzichtbaar). Om te controleren of het is herkend, controleer het bestand app/etc/config.php. Het heeft een lijst met automatisch gegenereerde modules die actief zijn.

Wijzig deze lijst nooit handmatig!

1
grep Learning_FirstUnit app/etc/config.php

Met behulp van deze stappen kunt u met succes een nieuwe module maken in Magento 2.

Grondbeginselen van Magento 2-ontwikkeling

← Vorige
Een nieuw productkenmerk toevoegen

Volgende →
Een nieuwe pagina maken

badges

Let’s connect

We hebben altijd zin in nieuwe en uitdagende projecten. We gaan graag met je in gesprek!