Làm thế nào để thêm một trình trợ giúp tùy chỉnh trong mô-đun của tôi?


9

Làm cách nào để tạo Trình trợ giúp mới hoặc ghi đè / ghi lại Trình trợ giúp lõi trong mô-đun Magento 2?

Tôi đã thử thêm phụ thuộc vào module.xmlMô-đun tùy chỉnh của mình , nhưng nó không tải lớp Trình trợ giúp nào cả.

Dưới đây là của tôi 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>

Câu trả lời:


20

Tạo nên: app/code/Company1/Module1/composer.json

{
    "tên": "company1 / module-module1",
    "sự miêu tả": "",
    "yêu cầu": {
        "php": "~ 5.5.0 | ~ 5.6.0 | ~ 7.0.0",
        "magento / khung": "100.0. *",
        "magento / mô-đun-ui": "100.0. *",
        "magento / module-config": "100.0. *",
        "magento / mô-đun thư mục": "100.0. *"
    },
    "loại": "mô-đun magento2",
    "phiên bản": "100.0.0",
    "giấy phép": [
        "OSL-3.0",
        "AFL-3.0"
    ],
    "tự động tải": {
        "tập tin": ["đăng ký.php"],
        "psr-4": {
            "Công ty1 \ Module1 \\": ""
        }
    }
}

Tạo nên: app/code/Company1/Module1/registration.php

\ Magento \ Framework \ Thành phần \ Hợp phầnRegistrar :: đăng ký (
    \ Magento \ Framework \ Thành phần \ Thành phầnRegistrar :: MODULE,
    'Công ty1_Module1',
    __DIR__
);

Tạo nên: app/code/Company1/Module1/etc/module.xml

<? xml phiên bản = "1.0"?>
<config xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi: noNamespaceSchemaLocation = "urn: magento: framework: Module / etc / module.xsd">
    <tên mô-đun = "Company1_Module1" setup_version = "2.0.0">
        <trình tự>
            <tên mô-đun = "Magento_Directory" />
        </ trình tự>
    </ mô đun>
</ config>

Tạo mô-đun xong. Vì vậy, bây giờ tạo lớp người trợ giúp trong thư mục Helper .

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

không gian tên Company1 \ Module1 \ Helper;

lớp Dữ liệu mở rộng \ Magento \ Framework \ App \ Helper \ AbstractHelper
{
    Hàm công khai someMethod ()
    {
        trả lại 1;
    }
}

Làm thế nào để sử dụng lớp trợ giúp bên trong bộ điều khiển

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

Làm thế nào để sử dụng lớp trợ giúp trong khối

chức năng công cộng __construct (
        \ Magento \ Framework \ View \ Element \ Template \ Bối cảnh $ bối cảnh,
        \ Company1 \ Module1 \ Helper \ Data $ helper,
        mảng $ data = []
    ) {
        $ this-> người trợ giúp = $ người trợ giúp;
        cha mẹ :: __ xây dựng ($ bối cảnh, $ dữ liệu);
    }

Vì vậy, $this->helperhiện nay là thể hiện của dữ liệu.

Để ghi đè bất kỳ lớp nào bạn có thể sử dụng ưu tiên .

app/code/Company1/Module1/etc/di.xml:

<xml phiên bản = "1.0"?>
<config xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi: noNamespaceSchemaLocation = "urn: magento: framework: ObjectManager / etc / config.xsd">
    <ưu tiên cho = "Magento \ Directory \ Helper \ Data" type = "Company1 \ Module1 \ Helper \ Data" />
</ config>

Bạn cũng có thể sử dụng plugin. Plugin là cách tốt nhất để khắc phục xung đột viết lại. để biết thêm thông tin ví dụ về plugin

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.