似乎有几种方法可以加载要在phtml文件中使用的助手。但是,我不太了解这种方式的优缺点。
namespace Company\Module\Block;
use \Magento\Framework\View\Element\Template\Context;
use \Company\Module\Helper\Data;
class Module extends \Magento\Framework\View\Element\Template
{
private $_helper;
public function __construct(Context $context, Data $helper)
{
$this->_helper = $helper;
parent::__construct($context);
}
public function isLoggedIn()
{
return $this->_helper->isUserLoggedIn();
}
}
然后在phtml中像这样使用:
$block->isLoggedIn()
$helper = $this->helper('Company\Module\Helper\Data');
$helper->isLoggedIn();
最后...
public
成为块,将被认为是不好的做法吗?namespace Company\Module\Block;
use \Magento\Framework\View\Element\Template\Context;
use \Company\Module\Helper\Data;
class Module extends \Magento\Framework\View\Element\Template
{
public $helper;
public function __construct(Context $context, Data $helper)
{
$this->helper = $helper;
parent::__construct($context);
}
然后根据需要在phtml中使用:
$block->helper->isLoggedIn()
喜欢听听这三种在phtml中使用帮助器的想法。我更喜欢使用方法#2,因为那样我就不必仅在phtml文件中使用帮助程序就可以创建自定义块。但是,如果这将导致严重的速度下降或问题,我将避免它。
还有另一种扩展Magento 2块功能的方法。它称为View Models。
您可以在这里找到文档:https://devdocs.magento.com/guides/v2.3/extension-dev-guide/view-models.html
注意:View模型从Magento 2.2开始可用。
布局XML文件checkout_cart_item_renderers.xml
<referenceBlock name="checkout.cart.item.renderers.default">
<arguments>
<argument name="view_model" xsi:type="object">OrangeCompany\Catalog\ViewModel\MyNewViewModel</argument>
</arguments>
查看模型本身:
namespace OrangeCompany\Catalog\ViewModel;
class MyNewViewModel implements \Magento\Framework\View\Element\Block\ArgumentInterface
{
public function getTitle()
{
return 'Hello World';
}
}
以及您的phtml文件:
<?php
/** @var $viewModel \OrangeCompany\Catalog\ViewModel\MyNewViewModel */
$viewModel = $block->getViewModel();
?>
<h1><?= $block->escapeHtml($viewModel->getTitle()); ?></h1>