Cara memanggil metode pembantu dalam file .phtml

16

Mencoba mengembangkan sesuatu di magento 2. Tapi, saya tidak menemukan cara memanggil metode Helper di file template (.phtml).

Saya ingin penggantian kode di bawah ini:

$this->helper('modulename/helpername')->methodname();

Jika ada yang tahu tolong bantu saya.

Gaurav Agrawal
sumber
Sudahkah Anda mencoba jawaban saya?
chirag
Hei, Anda harus menerima jawaban Marius di bawah ini.
seanbreeden
1
@seanbreeden Maaf, saya sudah memilih, tetapi lupa untuk menerima.
Gaurav Agrawal

Jawaban:

29

Anda tidak boleh menggunakan panggilan pembantu langsung di templat.
Siapkan instance helper Anda sebagai ketergantungan pada blok yang membuat template dan buat metode di blok Anda yang memanggil helper dan panggil metode itu di template.

Buat blok Anda seperti ini

protected $helperData;
public function __construct(
     ....
    \{Vendor}\{Module}\Helper\Data $helperData,
    ....
) {
    ....
    $this->helperData = $helperData;
    ....
}

public function doSomething()
{
    return $this->helperData->doSomething();
}

Kemudian Anda bisa memanggil template Anda $block->doSomething()

Marius
sumber
2
Bisakah Anda jelaskan apa yang menjadi masalah jika kami memanggil pembantu dalam template secara langsung tanpa mendefinisikan ketergantungan
Prashant Valanda
itu bukan praktik yang baik. Ini memperkenalkan ketergantungan yang tidak dideklarasikan. Jika Anda ingin melakukan ini dengan benar, Anda hanya perlu memanggil metode templat saja dari blok yang membuatnya.
Marius
2
Pengembang
magento
2
Itu tidak benar. Mungkin bagian itu belum di refactored
Marius
1
Jawaban singkat: ya. Jawaban panjang, Anda seharusnya tidak memiliki penolong dengan 10 metode dan semuanya diperlukan untuk blok yang sama. Jika itu terjadi, mungkin Anda harus memikirkan refactoring kode Anda ke blok dan template yang lebih kecil.
Marius
24

Anda harus menggunakan seperti ini:

$helper = $this->helper('{Vendor}\{Module}\Helper\Data');
$values = $helper->YourHelperMethod();
chirag
sumber
Ya, ini tidak berfungsi. Saya juga telah menggunakan kode yang sama sebelumnya
Gaurav Agrawal
$ this sekarang sudah tidak digunakan lagi dalam template template
Dominic Xigen
7

Anda perlu menulis seluruh nama kelas dalam pembantu seperti di bawah ini:

$this->helper('vendorename\modulename\Helper\helpername')

Anda dapat menggunakannya dalam file phtml menggunakan kode di atas

Valash Prashant
sumber
seperti ini akan bekerja pada m2?
jafar pinjar
$ this sekarang sudah tidak digunakan lagi dalam template template
Dominic Xigen
2

Saya menggunakan kode ini di salah satu modul saya.

Ubah Custommodule menjadi NameSpace (Nama perusahaan Anda) ubah ReviewRating menjadi (Nama Modul Anda)

Di /var/www/html/magento2/app/code/Custommodule/ReviewRating/Block/HomehorizontalWidget.php

   <?php
namespace Custommodule\ReviewRating\Block;

class HomehorizontalWidget extends \Magento\Framework\View\Element\Template
{

protected $_helper;

public function __construct(
    \Magento\Framework\View\Element\Template\Context $context,
    array $data = [],
    \Custommodule\ReviewRating\Helper\Data $helper
) {
    parent::__construct($context, $data);

    $this->_helper = $helper;
}

public function getEnable(){
        return $this->_helper->getEnable();
    }

}

Di /var/www/html/magento2/app/code/Custommodule/ReviewRating/view/frontend/templates/homehorizontalwidget.phtml

 <?php  echo $block->getEnable(); ?>

Di /var/www/html/magento2/app/code/Custommodule/ReviewRating/Helper/Data.php

<?php 
namespace Custommodule\ReviewRating\Helper;

class Data extends \Magento\Framework\App\Helper\AbstractHelper { 

    /** * @var \Magento\Framework\App\Config\ScopeConfigInterfac 
        */ 
    protected $_scopeConfig; 
    CONST ENABLE = 'reviewrating/general/enable_module'; 


    public function __construct( \Magento\Framework\App\Helper\Context $context, 
            \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig ) {

             parent::__construct($context); $this->_scopeConfig = $scopeConfig;
    }

    public function getEnable(){
        return $this->_scopeConfig->getValue(self::ENABLE);
    }

}

Di /var/www/html/magento2/app/code/Custommodule/ReviewRating/etc/adminhtml/system.xml

system configuration labels created here 
inrsaurabh
sumber
0

Coba kode ini di Blokir Anda:

protected $helperData;
public function __construct(
     ....
    \{Vendor}\{Module}\Helper\Data $helperData,
    ....
) {
    ....
    $this->helperData = $helperData;
    ....
}

public function getHelper()
{
    return $this->helperData;
}

Dan dalam templat Anda, Anda dapat menghubungi:

$helper = $block->getHelper();
Nero Phung
sumber