Я вижу, вы пришли к правильному решению, просто хочу подвести итог.
Внедрение в конструктор должно использоваться для извлечения помощника (или любого другого экземпляра) в любом классе, который вам нужен:
class SomeClass
{
public function __construct(\Magento\Core\Helper\Data $helper)
{
$this->helper = $helper;
}
public function doSmth()
{
$this->helper->someMethod();
}
}
Обратите внимание, что комментарии phpDoc не требуются , Magento будет читать сигнатуру конструктора напрямую, чтобы выяснить, какие зависимости требуются.
\ Magento \ Core \ Helper \ Factory следует использовать только в тех редких случаях, когда вам приходится вызывать много разных помощников или вы не знаете точно, какой из них вам нужен.
Использование диспетчера объектов напрямую не рекомендуется . Поэтому, пожалуйста, не используйте:
\Magento\Core\Model\ObjectManager::getInstance()
Он существует только для сериализации / десериализации.
helper
в шаблоне, как$this->helper('Magento\Catalog\Helper\Image')
, это следует за лучшей практикой?Похоже, что Magento вдохновляет людей использовать свою новую систему автоматического внедрения зависимостей, чтобы получать помощников и модели в объекты через конструктор объекта.
Короткая версия? Если у вас есть объект, экземпляр которого
создаетсядиспетчером объектов,и вы украсили конструктор с помощью PHPDoc, а параметры имеют правильный набор подсказок типа, менеджер объектов автоматически создаст экземпляр помощника (или, я полагаю, других объектов) для вас.@param
Например, следующий конструктор вставит в объект основной помощник данных.
источник
Помимо всех приведенных выше ответов, если вам нужно использовать помощник в шаблоне phtml, вы можете просто сделать это так:
Надеюсь, будет полезно, если кто-то не знал этого раньше;)
источник
Способ создания помощников (по крайней мере, для нового модуля Backend (~ dev50)) осуществляется через helperFactory:
По сути, это просто специализированный тип модельной фабрики. Например: Magento \ Core \ Block \ Context line 143 (dev50) как часть конструктора:
Вспомогательная фабрика возвращает запрошенную модель на основе имени класса и гарантирует, что это
instanceof
абстрактный класс помощника:Если бы вы реализовали это самостоятельно, кажется, ядро Magento загружает его одним из двух способов:
Ролл свой собственный завод:
Или просто возьмите это напрямую:
источник
get
?Попробуй так
источник