¿Cómo agregar un ayudante personalizado en mi módulo?

9

¿Cómo crear un nuevo Helper o anular / reescribir Core Helper en el módulo Magento 2?

Intenté agregar dependencia a mi module.xmlmódulo personalizado, pero no carga la clase Helper en absoluto.

Debajo está mi 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
fuente

Respuestas:

20

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

{
    "nombre": "empresa1 / módulo-módulo1",
    "descripción": "",
    "exigir": {
        "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",
    "versión": "100.0.0",
    "licencia": [
        "OSL-3.0",
        "AFL-3.0"
    ],
    "carga automática": {
        "archivos": ["Registration.php"],
        "psr-4": {
            "Empresa1 \\ Módulo1 \\": ""
        }
    }
}

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

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

Crear: 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: Module / etc / module.xsd">
    <module name = "Company1_Module1" setup_version = "2.0.0">
        <secuencia>
            <module name = "Magento_Directory" />
        </sequence>
    </module>
</config>

Creación del módulo realizada. Así que ahora cree la clase auxiliar dentro de la carpeta auxiliar .

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

espacio de nombres Company1 \ Module1 \ Helper;

Los datos de clase se extienden \ Magento \ Framework \ App \ Helper \ AbstractHelper
{
    función pública someMethod ()
    {
        retorno 1;
    }
}

Cómo usar la clase auxiliar dentro del controlador

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

Cómo usar la clase auxiliar dentro del bloque

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

Así $this->helperque ahora es instancia de datos.

Para sobrescribir cualquier clase, puede usar preferencia .

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">
    <preferencia para = "Magento \ Directory \ Helper \ Data" type = "Empresa1 \ Módulo1 \ Helper \ Data" />
</config>

También puedes usar el complemento. El complemento es la mejor manera de superar el conflicto de reescritura. para más información ejemplo de complemento

Sohel Rana
fuente