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.