Wie füge ich meinem Modul einen benutzerdefinierten Helfer hinzu?


9

Wie erstelle ich einen neuen Helper oder überschreibe / schreibe Core Helper im Magento 2-Modul?

Ich habe versucht, Abhängigkeiten zu meinem module.xmlbenutzerdefinierten Modul hinzuzufügen , aber die Helper-Klasse wird überhaupt nicht geladen.

Unten ist meine 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="Company1_Module1" schema_version="1.0.0" setup_version="1.0.0">
        <sequence>Magento_Directory</sequence>
  </module>
</config>

Antworten:


20

Erstellen: app/code/Company1/Module1/composer.json

{
    "name": "company1 / module-module1",
    "Beschreibung": "",
    "benötigen": {
        "php": "~ 5.5.0 | ~ 5.6.0 | ~ 7.0.0",
        "Magento / Framework": "100.0. *",
        "magento / module-ui": "100.0. *",
        "magento / module-config": "100.0. *",
        "magento / module-directory": "100.0. *"
    },
    "Typ": "Magento2-Modul",
    "version": "100.0.0",
    "Lizenz": [
        "OSL-3.0",
        "AFL-3.0"
    ],
    "Autoload": {
        "files": ["register.php"],
        "psr-4": {
            "Company1 \\ Module1 \\": ""
        }}
    }}
}}

Erstellen: app/code/Company1/Module1/registration.php

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

Erstellen: app/code/Company1/Module1/etc/module.xml

<? xml version = "1.0"?>
<config xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi: noNamespaceSchemaLocation = "Urne: magento: Framework: Modul / etc / module.xsd">
    <module name = "Company1_Module1" setup_version = "2.0.0">
        <sequenz>
            <module name = "Magento_Directory" />
        </ sequence>
    </ module>
</ config>

Modulerstellung abgeschlossen. Erstellen Sie nun eine Hilfsklasse im Hilfsordner .

app/code/Company1/Module1/Helper/Data.php::

Namespace Company1 \ Module1 \ Helper;

Klasse Daten erweitert \ Magento \ Framework \ App \ Helper \ AbstractHelper
{
    öffentliche Funktion someMethod ()
    {
        return 1;
    }}
}}

Verwendung der Hilfsklasse im Controller

$this->_objectManager->create('Company1\Module1\Helper\Data')->someMethod();

Verwendung der Hilfsklasse im Block

öffentliche Funktion __construct (
        \ Magento \ Framework \ View \ Element \ Template \ Context $ context,
        \ Company1 \ Module1 \ Helper \ Data $ helper,
        Array $ data = []
    ) {
        $ this-> helper = $ helper;
        parent :: __ Konstrukt ($ context, $ data);
    }}

So $this->helperist jetzt Instanz von Daten.

Zum Überschreiben jeder Klasse können Sie die Einstellungen verwenden .

app/code/Company1/Module1/etc/di.xml::

<xml version = "1.0"?>
<config xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi: noNamespaceSchemaLocation = "Urne: magento: Framework: ObjectManager / etc / config.xsd">
    <Präferenz für = "Magento \ Directory \ Helper \ Data" type = "Company1 \ Module1 \ Helper \ Data" />
</ config>

Sie können auch das Plugin verwenden. Das Plugin ist der beste Weg, um Konflikte beim Umschreiben zu überwinden. Für weitere Informationen Plugin Beispiel

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.