Ich habe anscheinend Probleme, die Magento 2-Abhängigkeitsinjektion mit Blöcken zu erfassen, und jedes Mal, wenn ich versuche, einen Block zu erweitern, der nicht \ Magento \ Framework \ View \ Element \ Template ist, treten Fehler auf.
Ich möchte einen Block erstellen, der die grundlegende Blockklasse von Magento \ Theme \ Block \ Html \ Header \ Logo erweitert - alles funktioniert einwandfrei, bis ich die Abhängigkeitsinjektion innerhalb der Konstruktmethode versuche:
<?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);
}
}
Sobald ich versuche, meine Helfer-Klasse (oder irgendetwas anderes) zu injizieren, erhalte ich einen Stack-Trace, der mit dem folgenden Fehler beginnt:
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
Wenn ich meinem __construct die gleichen Abhängigkeiten hinzufüge, wie die Datei, die ich von ihr aus erweitere, funktioniert, ist dies sicherlich eine umgekehrte Vorgehensweise, da der Punkt der Klassenvererbung darin besteht, dass ich alle Methoden und Eigenschaften des übergeordneten Elements übernehme.
Ich denke, ich brauche nur eine grundlegende Erklärung von jemandem zum Erweitern von Klassen und Verwenden von DI mit Magento 2. Jede Hilfe sehr geschätzt!