\ 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를 사용하는 것에 대한 기본 설명이 필요하다고 생각합니다.
"확실히 그것은 역행하는 방법이다" Agreed.
—
James