Je vois que vous êtes venu à la bonne solution, je veux juste résumer.
L'injection de constructeur doit être utilisée pour récupérer l'aide (ou toute autre instance) dans la classe dont vous avez besoin:
class SomeClass
{
public function __construct(\Magento\Core\Helper\Data $helper)
{
$this->helper = $helper;
}
public function doSmth()
{
$this->helper->someMethod();
}
}
Notez qu'aucun commentaire phpDoc n'est requis , Magento lira directement la signature du constructeur pour déterminer les dépendances requises.
\ Magento \ Core \ Helper \ Factory ne doit être utilisé que dans les rares cas où vous devez appeler plusieurs assistants ou si vous ne savez pas exactement lequel vous avez besoin.
L'utilisation directe d'Object Manager est strictement déconseillée . Veuillez donc éviter d'utiliser:
\Magento\Core\Model\ObjectManager::getInstance()
Il n'est là que pour la sérialisation / désérialisation.
helper
dans le modèle, comme$this->helper('Magento\Catalog\Helper\Image')
, il suit la meilleure pratique?Il semble que Magento encourage les gens à utiliser leur nouveau système d'injection automatique de dépendances pour obtenir des assistants et des modèles dans des objets via le constructeur de l'objet.
La version courte? Si vous avez un objet qui est instancié par le gestionnaire d'objets,
et décorer un constructeur avec un PHPDoc, et les paramètres a un ensemble d'indices de type approprié, le gestionnaire d'objets automatiquement instancier l'aide (ou, je crois, d' autres objets) pour vous.@param
Par exemple, le constructeur suivant injecterait un assistant de données de base dans l'objet.
la source
En plus de toutes les réponses ci-dessus, si vous devez utiliser helper dans le modèle phtml, vous pouvez simplement faire comme ceci:
J'espère que c'est utile si quelqu'un ne le savait pas auparavant;)
la source
La façon dont les assistants sont instanciés (au moins pour le nouveau module Backend (~ dev50)) se fait via une helperFactory:
Ce qui est essentiellement juste un type spécialisé d'une usine de modèles. Par exemple: Magento \ Core \ Block \ Context line 143 (dev50) dans le cadre du constructeur:
La fabrique d'assistance renvoie le modèle demandé en fonction du nom de la classe et s'assure qu'il s'agit d'une
instanceof
classe abstraite d'assistance:Si vous deviez l'implémenter vous-même, il semble que le noyau Magento le charge de l'une des deux manières suivantes:
Roulez votre propre usine:
Ou saisissez-le directement:
la source
get
?Essayez de cette façon
la source