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>

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.