¿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>

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.