.phtml 파일에서 도우미 메서드를 호출하는 방법


16

magento 2에서 무언가를 개발하려고 시도했지만 template (.phtml) 파일에서 Helper 메소드를 호출하는 방법을 찾지 못했습니다.

아래 코드를 대체하고 싶습니다.

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

아는 사람이 있으면 도와주세요.


내 대답을 시도 했습니까?
chirag

이봐, 당신은 아래 마리우스의 대답을 받아 들여야합니다.
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

$ this는 이제 템플릿 로직에서 사용되지 않습니다
Dominic Xigen

7

다음과 같이 도우미에서 전체 클래스 이름을 작성해야합니다.

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

위의 코드를 사용하여 phtml 파일에서 사용할 수 있습니다


이처럼 m2에서 작동합니까?
jafar pinjar 2014 년

$ this는 이제 템플릿 로직에서 사용되지 않습니다
Dominic Xigen

2

이 코드를 내 모듈 중 하나에서 사용했습니다.

Custommodule을 NameSpace (회사 이름)로 변경 ReviewReating (을 모듈 이름)으로 변경

/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.