Cách gọi phương thức trợ giúp trong tệp .phtml


16

Cố gắng phát triển một cái gì đó trong magento 2. Nhưng, tôi đã không tìm thấy cách gọi phương thức Trình trợ giúp trong tệp mẫu (.phtml).

Tôi muốn thay thế mã dưới đây:

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

Nếu ai biết xin hãy giúp tôi.


bạn đã thử câu trả lời của tôi chưa?
chirag

Này, bạn nên chấp nhận câu trả lời của Marius bên dưới.
seanbreeden

1
@seanbreeden Xin lỗi, tôi đã bỏ phiếu, nhưng quên chấp nhận.
Gaurav Agrawal

Câu trả lời:


29

Bạn không nên sử dụng các cuộc gọi của người trợ giúp trực tiếp trong mẫu.
Có phiên bản trình trợ giúp của bạn được cung cấp dưới dạng phụ thuộc vào khối kết xuất mẫu và tạo một phương thức trong khối của bạn để gọi trình trợ giúp và gọi phương thức đó trong mẫu.

Có khối của bạn được xác định như thế này

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

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

Sau đó, bạn có thể gọi trong mẫu của bạn $block->doSomething()


2
Bạn có thể vui lòng giải thích vấn đề gì sẽ xảy ra nếu chúng tôi gọi trực tiếp người trợ giúp trong mẫu mà không xác định phụ thuộc
Prashant Valanda

nó không phải là một thực hành tốt. Nó giới thiệu một phụ thuộc không khai báo. Nếu bạn muốn làm điều này đúng cách, bạn chỉ nên gọi trong mẫu chỉ các phương thức từ khối kết xuất nó.
Marius

2
Nhà phát triển lõi magento cũng đã gọi người trợ giúp trực tiếp trong tệp phtml
Prashant Valanda

2
Điều đó không làm cho nó đúng. Có lẽ phần đó chưa được tái cấu trúc
Marius

1
Câu trả lời ngắn gọn: có. Câu trả lời dài, bạn không nên có một người trợ giúp với 10 phương thức và tất cả chúng đều cần thiết cho cùng một khối. Nếu điều đó xảy ra, có lẽ bạn nên suy nghĩ về việc tái cấu trúc mã của mình thành các khối và mẫu nhỏ hơn.
Marius

24

Bạn phải sử dụng như thế này:

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

Vâng, nó không hoạt động. Tôi cũng đã sử dụng mã tương tự trước đây
Gaurav Agrawal

$ điều này hiện không được chấp nhận trong logic mẫu
Dominic Xigen

7

Bạn cần viết tên cả lớp trong trình trợ giúp như sau:

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

Bạn có thể sử dụng nó trong tệp phtml bằng mã trên


như thế này sẽ làm việc trên m2?
jafar pinjar

$ điều này hiện không được chấp nhận trong logic mẫu
Dominic Xigen

2

Tôi đã sử dụng mã này trong một trong các mô-đun của tôi.

Thay đổi hàng hóa thành NameSpace (Tên công ty của bạn) thay đổi Đánh giáRating thành (Tên mô-đun của bạn)

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

}

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

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

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

}

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

system configuration labels created here 

0

Hãy thử mã này trong Khối của bạn:

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

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

Và trong mẫu của bạn, bạn có thể gọi:

$helper = $block->getHelper();
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.