\ Magento \ Framework \ View \ Element \ Templateではないブロックを拡張しようとするたびに、Magento 2の依存関係の注入をブロックで把握するのに苦労しているようです。
Magento \ Theme \ Block \ Html \ Header \ Logoの非常に基本的なブロッククラスを拡張するブロックを作成したい-コンストラクトメソッド内で依存関係の注入を試みるまで、すべてが正常に機能します。
<?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の説明が必要だと思います。
「確かにそれは物事を後進させる方法です」と同意しました。
—
ジェームズ