Не.
Это похоже на использование 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
который использовался в нашем шаблоне, игнорируется.