如何在.phtml文件中调用辅助方法


16

尝试在magento 2中进行开发。但是,我没有找到如何在template(.phtml)文件中调用Helper方法的方法。

我想要替换以下代码:

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

如果有人知道,请帮助我。


你试过我的答案了吗?
chirag

嘿,您应该在下面接受Marius的回答。
seanbreeden 18/09/21

1
@seanbreeden对不起,我已经投票了,但忘了接受。
Gaurav Agrawal '18

Answers:


30

您不应直接在模板中使用帮助程序调用。
提供帮助程序实例作为对呈现模板的块的依赖,并在您的块中创建一个调用帮助程序并在模板中调用该方法的方法。

像这样定义您的区块

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

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

然后您可以调用模板 $block->doSomething()


2
如果我们直接在模板中调用辅助程序而不定义依赖项,您能解释一下问题
吗?

这不是一个好习惯。它引入了一个未声明的依赖关系。如果要正确执行此操作,则应仅从呈现它的块中仅调用模板中的方法。
马吕斯

2
核心magento开发人员还直接在phtml文件中调用了helper
Prashant Valanda

2
那是不对的。也许该部分尚未重构
Marius

1
简短的回答:是的。长答案,您不应该有10种方法的助手,并且所有这些对于同一块都是必需的。如果发生这种情况,也许您应该考虑将代码重构为较小的块和模板。
马吕斯

24

您必须这样使用:

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

是的,它不起作用。我之前也使用过相同的代码
Gaurav Agrawal

$ this现在在模板逻辑中已弃用
Dominic Xigen


2

我在我的一个模块中使用了此代码。

将Custommodule更改为NameSpace(您的公司名称),将ReviewRating更改为(您的模块名称)

/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();
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.