Come chiamare il metodo helper nel file .phtml


16

Cercando di sviluppare qualcosa in Magento 2. Ma non ho trovato il modo di chiamare un metodo Helper nel file template (.phtml).

Voglio una sostituzione del codice seguente:

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

Se qualcuno lo sa, aiutami.


hai provato la mia risposta?
Chirag,

Ehi, dovresti accettare la risposta di Marius qui sotto.
seanbreeden,

1
@seanbreeden Siamo spiacenti, ho votato, ma ho dimenticato di accettare.
Gaurav Agrawal,

Risposte:


29

Non utilizzare le chiamate di supporto direttamente nel modello.
Chiedi alla tua istanza di supporto di fornire una dipendenza al blocco che esegue il rendering del modello e crea un metodo nel tuo blocco che chiama l'helper e chiama quel metodo nel modello.

Definisci il tuo blocco così

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

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

Quindi puoi chiamare il tuo modello $block->doSomething()


2
Puoi spiegare quale sarebbe il problema se chiamassimo helper nel template direttamente senza definire in dipendenza
Prashant Valanda

non è una buona pratica. Introduce una dipendenza non dichiarata. Se vuoi farlo correttamente, dovresti chiamare nel modello solo i metodi dal blocco che lo rende.
Marius

2
Lo sviluppatore di core magento ha anche chiamato helper direttamente nel file phtml
Prashant Valanda,

2
Questo non lo rende giusto. Forse quella parte non viene ancora rifattorizzata
Marius

1
Risposta breve: si. Risposta lunga, non dovresti avere un aiutante con 10 metodi e tutti sono necessari per lo stesso blocco. Se ciò accade, forse dovresti pensare di eseguire il refactoring del codice in blocchi e modelli più piccoli.
Marius

24

Devi usare così:

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

Sì, non funziona. Ho anche usato lo stesso codice prima
Gaurav Agrawal

$ questo è ora deprecato nella logica dei template
Dominic Xigen,

7

Devi scrivere l'intero nome della classe nell'helper come di seguito:

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

Puoi usarlo nel file phtml usando il codice sopra


come questo funzionerà su m2?
jafar pinjar,

$ questo è ora deprecato nella logica dei template
Dominic Xigen,

2

Ho usato questo codice in uno dei miei moduli.

Cambia Custommodule in NameSpace (il nome della tua azienda) cambia ReviewRating in (il tuo nome del modulo)

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

}

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

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

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

}

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

system configuration labels created here 

0

Prova questo codice nel tuo blocco:

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

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

E nel tuo modello, puoi chiamare:

$helper = $block->getHelper();
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.