Answers:
别。
这就像ObjectManager::getInstance()->create()
在模板中使用!
使用自定义的Block接收帮助者作为构造函数依赖项,并添加一个调用该helper方法的代理方法。
在模板中:
$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();
}
用OOP原则来说,这避免了违反“得墨meter耳法则”。它将业务逻辑封装在模块中,而不是模板中。副作用是,随着逻辑被移入模块,它也使逻辑更具可测试性。
关于将什么逻辑放入帮助程序类中,我发现在Magento 2中,帮助程序主要对服务有意义,例如不是模型而是包含可重用代码的东西,例如价格格式(包含在核心中,但是我可以现在还没有想到一个更好的例子)。
我将助手视为模块内部的全局函数(对不起,单词“ global”一词),而经理/服务合同则视为允许在模块内部和外部使用的全局函数。
如果遵循此原则,您会发现帮助程序的使用最少,我仅将它们用作模块中的配置包装器。
$this->configHelper->get(Config::PATH_TO_XML_PATH);
$this->configHelper->isEnabled();
这种东西。如果您在模块之外还具有其他实用的功能,则可以创建一个管理器。
在理想情况下,需要其他模块功能的第三方开发人员只需要查看可用的界面,即可找到存储库和管理器以及-文件Api
夹中的内容。
di.xml
块类类型中使用首选项,不要保留某些布局配置。例如,我尝试为该类\Magento\Catalog\Block\Product\View\Type\Simple
执行default.phtml
此操作,我们模板中使用的模板被忽略。暂时不知道为什么