Cómo llamar al método auxiliar en el archivo .phtml


16

Tratando de desarrollar algo en magento 2. Pero no encontré cómo llamar a un método de ayuda en el archivo de plantilla (.phtml).

Quiero un reemplazo del siguiente código:

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

Si alguien sabe por favor ayúdame.


¿Has probado mi respuesta?
chirag

Oye, deberías aceptar la respuesta de Marius a continuación.
seanbreeden

1
@seanbreeden Lo siento, he votado, pero olvidé aceptar.
Gaurav Agrawal

Respuestas:


29

No debe usar llamadas de ayuda directamente en la plantilla.
Haga que su instancia auxiliar se proporcione como una dependencia del bloque que representa la plantilla y cree un método en su bloque que llame al auxiliar y llame a ese método en la plantilla.

Ten tu bloque definido así

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

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

Entonces puedes llamar a tu plantilla $block->doSomething()


2
¿Podría explicar cuál sería el problema si llamamos al ayudante en la plantilla directamente sin definir la dependencia
Prashant Valanda

No es una buena práctica. Introduce una dependencia no declarada. Si desea hacer esto correctamente, solo debe llamar a la plantilla solo a los métodos del bloque que lo representa.
Marius

2
El desarrollador principal de magento también ha llamado al ayudante directamente en el archivo phtml
Prashant Valanda

2
Eso no lo hace correcto. Tal vez esa parte aún no se ha refactorizado
Marius

1
Respuesta corta: sí. Respuesta larga, no debe tener un ayudante con 10 métodos y todos son necesarios para el mismo bloque. Si eso sucede, tal vez debería pensar en refactorizar su código a bloques y plantillas más pequeños.
Marius

24

Tienes que usar así:

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

Sí, no funciona. También he usado el mismo código antes
Gaurav Agrawal,

$ esto ahora está en desuso en la lógica de la plantilla
Dominic Xigen

7

Debe escribir el nombre completo de la clase en ayudante de la siguiente manera:

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

Puede usarlo en un archivo phtml usando el código anterior


como esto funcionará en m2?
jafar pinjar

$ esto ahora está en desuso en la lógica de la plantilla
Dominic Xigen

2

Usé este código en uno de mi módulo.

Cambie Custommodule a NameSpace (el nombre de su compañía) cambie ReviewRating a (Su nombre de módulo)

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

}

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

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

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

}

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

system configuration labels created here 

0

Prueba este código en tu bloque:

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

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

Y en su plantilla, puede llamar:

$helper = $block->getHelper();
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.