每当我尝试扩展不是\ Magento \ Framework \ View \ Element \ Template的块时,我似乎都难以理解带有块的Magento 2依赖项注入,但最终会出错。
我想创建一个扩展Magento \ Theme \ Block \ Html \ Header \ Logo的非常基本的块类的块 -一切正常,直到我尝试在construct方法中进行依赖注入:
<?php
namespace Creare\Test\Block\Header;
class Logo extends \Magento\Theme\Block\Html\Header\Logo
{
protected $_creareHelper;
public function __construct(
\Magento\Framework\View\Element\Template\Context $context,
\Creare\Seo\Helper\Data $creareHelper,
array $data = []
)
{
$this->_creareHelper = $creareHelper;
parent::__construct($context, $data);
}
}
一旦我尝试注入我的助手类(或与此有关的任何其他东西),我就会得到一个堆栈跟踪,并从以下错误开始:
Recoverable Error: Argument 2 passed to Magento\Theme\Block\Html\Header\Logo::__construct() must be an instance of Magento\MediaStorage\Helper\File\Storage\Database, array given, called in /Users/adammoss/PhpstormProjects/Magento2/app/code/Creare/Test/Block/Header/Logo.php on line 17 and defined in /Users/adammoss/PhpstormProjects/Magento2/app/code/Magento/Theme/Block/Html/Header/Logo.php on line 33
如果我在我的__construct文件中添加与我正在扩展的文件相同的依赖关系,但是肯定是一种倒退的处理方式,因为类继承的要点是我吸收了父级的所有方法和属性?
我想我只需要某人提供关于扩展类以及在Magento 2中使用DI的基本101解释。非常感谢您的帮助!
“当然,这是一种倒退的方式”。
—
詹姆斯