วิธีเรียกใช้เมธอดตัวช่วยเหลือในไฟล์. phtml


16

พยายามพัฒนาบางอย่างด้วย magento 2 แต่ฉันไม่พบวิธีเรียกใช้ Helper ในไฟล์ template (.phtml)

ฉันต้องการเปลี่ยนรหัสด้านล่าง:

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

หากใครรู้โปรดช่วยฉัน


คุณลองคำตอบของฉันแล้วหรือยัง
chirag

สวัสดีคุณควรยอมรับคำตอบของ Marius ด้านล่าง
seanbreeden

1
@ seanbreeden ขออภัยฉันลงคะแนนแล้ว แต่ลืมที่จะยอมรับ
Gaurav Agrawal

คำตอบ:


30

คุณไม่ควรใช้การโทรของผู้ช่วยเหลือโดยตรงในเทมเพลต
ให้ผู้ช่วยอินสแตนซ์ของคุณจัดเตรียมไว้เพื่ออ้างอิงกับบล็อกที่สร้างเท็มเพลตและสร้างวิธีการในบล็อกของคุณที่เรียกผู้ช่วยและเรียกเมธอดนั้นในเทมเพลต

บล็อกของคุณมีการกำหนดเช่นนี้

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

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

จากนั้นคุณสามารถโทรหาในเทมเพลตของคุณ $block->doSomething()


2
คุณช่วยอธิบายสิ่งที่เป็นปัญหาได้ไหมถ้าเราเรียกผู้ช่วยในเทมเพลตโดยตรงโดยไม่ต้องพึ่งพา
Prashant Valanda

มันไม่ใช่วิธีปฏิบัติที่ดี มันแนะนำการพึ่งพาที่ไม่ได้ประกาศ หากคุณต้องการทำอย่างถูกต้องคุณควรโทรเฉพาะในเทมเพลตเฉพาะวิธีการจากบล็อกที่แสดงผล
Marius

2
นักพัฒนาวีโอไอพีคอร์ได้เรียกผู้ช่วยโดยตรงในไฟล์ phtml
Prashant Valanda

2
ที่ไม่ทำให้ถูกต้อง บางทีส่วนนั้นยังไม่ได้รับการปรับปรุงใหม่
Marius

1
คำตอบสั้น ๆ : ใช่ คำตอบยาว ๆ คุณไม่ควรมีผู้ช่วยที่มี 10 วิธีและทั้งหมดนั้นจำเป็นสำหรับบล็อกเดียวกัน หากเกิดขึ้นบางทีคุณควรคิดถึงการเปลี่ยนรหัสของคุณเป็นบล็อคและเทมเพลตขนาดเล็ก
Marius

24

คุณต้องใช้สิ่งนี้:

$helper = $this->helper('{Vendor}\{Module}\Helper\Data');
$values = $helper->YourHelperMethod();

ใช่มันไม่ทำงาน ฉันเคยใช้รหัสเดิมมาก่อน
Gaurav Agrawal

$ นี้เลิกใช้แล้วในตรรกะของแม่แบบ
Dominic Xigen

7

คุณต้องเขียนชื่อคลาสทั้งหมดในตัวช่วยดังนี้

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

คุณสามารถใช้มันในไฟล์ phtml โดยใช้รหัสด้านบน


เช่นนี้จะทำงานบน m2?
jafar pinjar

$ นี้เลิกใช้แล้วในตรรกะของแม่แบบ
Dominic Xigen

2

ฉันใช้รหัสนี้ในหนึ่งในโมดูลของฉัน

เปลี่ยน Custommodule เป็น NameSpace (ชื่อ บริษัท ของคุณ) เปลี่ยน Review ให้เป็น (ชื่อโมดูลของคุณ)

ใน /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();
    }

}

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

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

ใน /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);
    }

}

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

system configuration labels created here 

0

ลองรหัสนี้ในบล็อกของคุณ:

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

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

และในแม่แบบของคุณคุณสามารถโทร:

$helper = $block->getHelper();
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.