Come aggiungere un aiuto personalizzato nel mio modulo?


9

Come creare un nuovo Helper o sovrascrivere / riscrivere Core Helper nel modulo Magento 2?

Ho provato ad aggiungere dipendenza nel mio module.xmlmodulo personalizzato, ma non carica affatto la classe Helper.

Di seguito è il mio 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>

Risposte:


20

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

{
    "name": "company1 / module-module1",
    "descrizione": "",
    "richiedono": {
        "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. *"
    },
    "type": "magento2-module",
    "versione": "100.0.0",
    "licenza": [
        "OSL-3.0",
        "AFL-3.0"
    ],
    "caricamento automatico": {
        "files": ["registration.php"],
        "psr-4": {
            "Company1 \\ Module1 \\": ""
        }
    }
}

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

\ Magento \ Framework \ Component \ ComponentRegistrar :: registro (
    \ Magento \ Framework \ Component \ ComponentRegistrar :: MODULO,
    'Company1_Module1',
    __DIR__
);

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

<? xml version = "1.0"?>
<config xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi: noNamespaceSchemaLocation = "urna: magento: framework: Module / etc / module.xsd">
    <module name = "Company1_Module1" setup_version = "2.0.0">
        <Sequence>
            <module name = "Magento_Directory" />
        </ Sequence>
    </ Module>
</ Config>

Creazione del modulo completata. Quindi ora crea la classe helper nella cartella Helper .

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

namespace Company1 \ Module1 \ Helper;

class Data estende \ Magento \ Framework \ App \ Helper \ AbstractHelper
{
    funzione pubblica someMethod ()
    {
        ritorno 1;
    }
}

Come utilizzare la classe helper all'interno del controller

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

Come utilizzare la classe helper all'interno del blocco

funzione pubblica __construct (
        \ Magento \ Framework \ View \ Element \ Template \ Context $ context,
        \ Company1 \ Module1 \ Helper \ Data $ helper,
        array $ data = []
    ) {
        $ this-> helper = $ helper;
        costrutto parent :: __ ($ context, $ data);
    }

Così $this->helperè ora l'istanza di Data.

Per sovrascrivere qualsiasi classe puoi usare la preferenza .

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

<xml version = "1.0"?>
<config xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi: noNamespaceSchemaLocation = "urn: magento: framework: ObjectManager / etc / config.xsd">
    <preferenza per = "Magento \ Directory \ Helper \ Data" type = "Company1 \ Module1 \ Helper \ Data" />
</ Config>

Puoi anche usare il plugin. Il plugin è il modo migliore per superare il conflitto di riscrittura. per ulteriori informazioni sul plugin plugin

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.