Bagaimana cara menambahkan pembantu kustom di modul saya?

9

Bagaimana cara membuat Helper baru atau mengganti / menulis ulang Core Helper di modul Magento 2?

Saya mencoba menambahkan ketergantungan ke module.xmlModul Kustom saya , tetapi tidak memuat kelas Helper sama sekali.

Di bawah ini adalah milik saya 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
sumber

Jawaban:

20

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

{
    "name": "company1 / module-module1",
    "deskripsi": "",
    "wajib": {
        "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. *"
    },
    "ketik": "magento2-module",
    "versi": "100.0.0",
    "lisensi": [
        "OSL-3.0",
        "AFL-3.0"
    ],
    "autoload": {
        "file": ["registrasi.php"],
        "psr-4": {
            "Company1 \\ Module1 \\": ""
        }
    }
}

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

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

Membuat: 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">
        [selanjutnya]
            <module name = "Magento_Directory" />
        </afterence>
    </module>
</config>

Pembuatan modul selesai. Jadi sekarang buat kelas helper di dalam folder Helper .

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

namespace Company1 \ Module1 \ Helper;

Data kelas meluas \ Magento \ Framework \ App \ Helper \ AbstractHelper
{
    fungsi publik someMethod ()
    {
        return 1;
    }
}

Cara menggunakan class helper di dalam controller

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

Cara menggunakan kelas helper di dalam blok

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

Begitu $this->helperjuga contoh Data.

Untuk menimpa kelas apa pun Anda dapat menggunakan preferensi .

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">
    <preferensi untuk = "Magento \ Directory \ Helper \ Data" type = "Company1 \ Module1 \ Helper \ Data" />
</config>

Anda juga dapat menggunakan plugin. Plugin adalah cara terbaik untuk mengatasi konflik penulisan ulang. untuk informasi lebih lanjut contoh plugin

Sohel Rana
sumber