Veo que llegaste a la solución correcta, solo quiero resumir.
La inyección de constructor debe usarse para recuperar ayudante (o cualquier otra instancia) en cualquier clase que necesite:
class SomeClass
{
public function __construct(\Magento\Core\Helper\Data $helper)
{
$this->helper = $helper;
}
public function doSmth()
{
$this->helper->someMethod();
}
}
Tenga en cuenta que no se requieren comentarios phpDoc , Magento leerá la firma del constructor directamente para determinar qué dependencias se requieren.
\ Magento \ Core \ Helper \ Factory solo debe usarse en esos casos excepcionales en los que tiene que llamar a muchos ayudantes múltiples, o no sabe exactamente cuál necesita.
Se desaconseja estrictamente el uso de Object Manager directamente . Así que por favor evite usar:
\Magento\Core\Model\ObjectManager::getInstance()
Está ahí solo para la serialización / deserialización.
helper
en plantilla, ¿$this->helper('Magento\Catalog\Helper\Image')
sigue la mejor práctica?Parece que las personas alentadoras de Magento usan su nuevo sistema de inyección de dependencia automática para obtener ayudantes y modelos en objetos a través del constructor del objeto.
La versión corta? Si tiene un objeto instanciado por el administrador de objetos
y decora un constructor con un PHPDoc, y los parámetros tienen un conjunto de sugerencias de tipo adecuado, el administrador de objetos creará una instancia automática del ayudante (o, creo, otros objetos) para usted.@param
Por ejemplo, el siguiente constructor inyectaría un ayudante de datos centrales en el objeto.
fuente
Además de todas las respuestas anteriores, si tiene que usar helper en la plantilla phtml, simplemente puede hacer lo siguiente:
Espero que sea útil si alguien no lo sabía antes;)
fuente
La forma en que se instancian los ayudantes (al menos para el nuevo módulo Backend (~ dev50)) es a través de un helperFactory:
Que es esencialmente solo un tipo especializado de una fábrica de modelos. Por ejemplo: Magento \ Core \ Block \ Context line 143 (dev50) como parte del constructor:
La fábrica de ayuda devolverá el modelo solicitado en función del nombre de la clase y se asegurará de que sea una
instanceof
clase abstracta de ayuda:Si tuviera que implementar esto usted mismo , parece que el núcleo de Magento lo está cargando de una de dos maneras:
Ruede su propia fábrica:
O simplemente tómalo directamente:
fuente
get
?Intenta de esta manera
fuente