Не.
Это похоже на использование ObjectManager::getInstance()->create()
в шаблоне!
Вместо этого используйте пользовательский блок, который получает помощника в качестве зависимости конструктора, и добавьте прокси-метод, который вызывает метод помощника.
В шаблоне:
$block->customMethod()
В блоке:
public function __construct(Path/To/Helper/Class $helperClass, ...other dependencies...)
{
$this->helper = $helperClass;
// ...other assignments and call to parent::__construct()
}
public function customMethod()
{
return $this->helper->customMethod();
}
В принципе ООП это позволяет избежать нарушения "Закона Деметры". Он инкапсулирует бизнес-логику в блоке вместо шаблона. В качестве побочного эффекта это также делает логику более тестируемой при перемещении логики в блок.
Что касается логики, заложенной в вспомогательные классы, я обнаружил, что в Magento 2 помощники в основном имеют смысл для сервисов, например, для чего-то, что не является моделью, но содержит повторно используемый код, например форматирование цены (которое содержится в ядре, но я могу не думаю о лучшем примере прямо сейчас).
di.xml
для блоков класса типа, не сохраняйте некоторые настройки макета. Я попытался, например, сделать это для класса\Magento\Catalog\Block\Product\View\Type\Simple
, шаблон,default.phtml
который использовался в нашем шаблоне, игнорируется.Я вижу помощников как глобальные функции внутри вашего модуля (извините за слово «глобальный»), а менеджеров / сервисные контракты - как глобальные функции, которые разрешено использовать как внутри, так и за пределами вашего модуля.
Если вы будете следовать этому принципу, вы увидите, что помощники минимально используются, я использую их только как оболочку конфигурации в своих модулях.
Это такие вещи. Если у вас есть другие функциональные возможности, которые могут быть полезны за пределами вашего модуля, вместо этого создайте менеджера.
В идеальном мире сторонним разработчикам, которым нужны функциональные возможности других модулей, нужно только искать в доступных интерфейсах репозитории и менеджеров и все, что находится в
Api
папке.источник