Comment ajouter un assistant personnalisé dans mon module?

9

Comment créer un nouvel assistant ou remplacer / réécrire Core Helper dans le module Magento 2?

J'ai essayé d'ajouter des dépendances dans mon module.xmlmodule personnalisé, mais cela ne charge pas du tout la classe Helper.

Ci-dessous est mon 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
la source

Réponses:

20

Créer: app/code/Company1/Module1/composer.json

{
    "name": "company1 / module-module1",
    "la description": "",
    "nécessite": {
        "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": "module magento2",
    "version": "100.0.0",
    "Licence": [
        "OSL-3.0",
        "AFL-3.0"
    ],
    "chargement automatique": {
        "files": ["registration.php"],
        "psr-4": {
            "Company1 \\ Module1 \\": ""
        }
    }
}

Créer: app/code/Company1/Module1/registration.php

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

Créer: 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">
        <séquence>
            <module name = "Magento_Directory" />
        </sequence>
    </module>
</config>

Création du module terminée. Créez maintenant une classe d'assistance dans le dossier Helper .

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

espace de noms Company1 \ Module1 \ Helper;

classe Data étend \ Magento \ Framework \ App \ Helper \ AbstractHelper
{
    fonction publique someMethod ()
    {
        retour 1;
    }
}

Comment utiliser la classe d'assistance dans le contrôleur

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

Comment utiliser la classe d'assistance dans le bloc

fonction publique __construct (
        \ Magento \ Framework \ View \ Element \ Template \ Context $ context,
        \ Company1 \ Module1 \ Helper \ Data $ helper,
        tableau $ data = []
    ) {
        $ this-> helper = $ helper;
        parent :: __ construct ($ context, $ data);
    }

Il en $this->helperva de même pour l'instance de Data.

Pour écraser n'importe quelle classe, vous pouvez utiliser la préférence .

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">
    <préférence pour = "Magento \ Directory \ Helper \ Data" type = "Company1 \ Module1 \ Helper \ Data" />
</config>

Vous pouvez également utiliser un plugin. Le plugin est le meilleur moyen de surmonter les conflits de réécriture. pour plus d'informations sur le plugin

Sohel Rana
la source