.phtmlファイルでヘルパーメソッドを呼び出す方法


16

magento 2で何かを開発しようとしています。しかし、template(.phtml)ファイルでヘルパーメソッドを呼び出す方法が見つかりませんでした。

以下のコードの置き換えが必要です:

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

誰もが知っていれば助けてください。


私の答えを試してみましたか?
chirag 16

ねえ、あなたは以下のマリウスの答えを受け入れる必要があります。
ショーンブリーデン

1
@seanbreeden申し訳ありませんが、私は賛成票を投じましたが、受け入れるのを忘れました。
ガウラフアグラワル

回答:


29

テンプレートでヘルパー呼び出しを直接使用しないでください。
ヘルパーインスタンスを、テンプレートをレンダリングするブロックへの依存関係として提供し、ブロックをヘルパーを呼び出すメソッドを作成し、テンプレートでそのメソッドを呼び出します。

このようにブロックを定義してください

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を

それは良い習慣ではありません。宣言されていない依存関係を導入します。これを適切に行いたい場合は、それをレンダリングするブロックのメソッドのみをテンプレートで呼び出す必要があります。
マリウス

2
コアMagentoの開発者は、PHTMLファイルに直接ヘルパーと呼ばれている
のPrashant Valanda

2
それは正しくありません。たぶん、その部分はまだリファクタリングされていません
マリウス

1
簡単な答え:はい。長い答えは、10個のメソッドを備えたヘルパーは必要ありません。それらはすべて同じブロックに必要です。その場合は、コードをより小さなブロックやテンプレートにリファクタリングすることを検討する必要があります。
マリウス

24

次のように使用する必要があります。

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

はい、動作していません。私も前に同じコードを使用している
のGauravアグラワル

これは今テンプレートロジックで廃止されました$
ドミニクXigen


2

私は自分のモジュールの1つでこのコードを使用しました。

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();
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.