मुझे लगता है कि मैं Magento 2 पर निर्भरता इंजेक्शन को ब्लॉक के साथ समझने के लिए संघर्ष कर रहा हूं, हर बार मैं एक ऐसे ब्लॉक का विस्तार करने की कोशिश करता हूं जो \ Magento \ फ्रेमवर्क \ View \ Element \ टेम्पलेट नहीं है मैं त्रुटियों के साथ समाप्त होता हूं।
मैं एक ऐसा ब्लॉक बनाना चाहता हूं जो Magento के \ N \ 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 में उसी निर्भरता को जोड़ता हूं जिस फ़ाइल से मैं इसे काम कर रहा हूं, लेकिन निश्चित रूप से यह चीजों को करने का एक पिछड़ा तरीका है क्योंकि वर्गीय विरासत की बात यह है कि मैं माता-पिता के सभी तरीकों और गुणों को अवशोषित करता हूं?
मुझे लगता है कि मुझे बस कक्षाओं से किसी को निकालने और मैगेंटो के साथ DI का उपयोग करने के लिए किसी मूल 101 स्पष्टीकरण की आवश्यकता है। किसी भी मदद की बहुत सराहना की!