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>
Vicky Dev
quelle

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

Sohel Rana
quelle