Como adicionar um auxiliar personalizado no meu módulo?

9

Como criar um novo Helper ou substituir / reescrever o Core Helper no módulo Magento 2?

Tentei adicionar dependência ao meu module.xmlmódulo personalizado, mas ele não carrega a classe Helper.

Abaixo está o meu 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
fonte

Respostas:

20

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

{
    "nome": "empresa1 / módulo-módulo1",
    "descrição": "",
    "require": {
        "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",
    "version": "100.0.0",
    "licença": [
        "OSL-3.0",
        "AFL-3.0"
    ],
    "carregamento automático": {
        "files": ["registration.php"],
        "psr-4": {
            "Empresa1 \\ Módulo1 \\": ""
        }
    }
}

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

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

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

<? xml version = "1.0"?>
<config xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi: noNamespaceSchemaLocation = "urn: magento: framework: Módulo / etc / module.xsd">
    <nome do módulo = "Company1_Module1" setup_version = "2.0.0">
        <sequência>
            <nome do módulo = "Magento_Directory" />
        </sequence>
    </module>
</config>

Criação do módulo concluída. Então agora crie a classe auxiliar dentro da pasta Helper .

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

espaço para nome Company1 \ Module1 \ Helper;

classe Data estende \ Magento \ Framework \ App \ Helper \ AbstractHelper
{
    função pública someMethod ()
    {
        retornar 1;
    }
}

Como usar a classe auxiliar dentro do controlador

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

Como usar a classe auxiliar dentro do bloco

função pública __construct (
        \ Magento \ Framework \ View \ Element \ Template \ Context $ context,
        \ Company1 \ Module1 \ Helper \ Data $ helper,
        matriz $ data = []
    ) {
        $ this-> helper = $ helper;
        parent :: __ construct ($ context, $ data);
    }

Então $this->helperagora é instância de dados.

Para substituir qualquer classe, você pode usar a preferência .

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

<versão xml = "1.0"?>
<config xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi: noNamespaceSchemaLocation = "urn: magento: framework: ObjectManager / etc / config.xsd">
    <preferência para = "Magento \ Directory \ Helper \ Data" tipo = "Company1 \ Module1 \ Helper \ Data" />
</config>

Você também pode usar o plugin. O plug-in é a melhor maneira de superar conflitos de reescrita. para obter mais informações, exemplo de plug-in

Sohel Rana
fonte