Magento 2 StoreManagerInterface가 컴파일의 컨텍스트 객체에 이미 존재합니다


15

내 확장에서이 오류가 발생합니다.

PackageName \ ModuleName \ Block \ Enhanced
/var/www/html/app/code/PackageName/ModuleName/Block/Enhanced.php \ Magento \ Store \ Model \ StoreManagerInterface에서 PackageName \ ModuleName \ Block \ Enhanced 클래스의 종속성이 잘못되었습니다. 컨텍스트 객체

 public function __construct(
    \Magento\Framework\View\Element\Template\Context $context,
    \Magento\Catalog\Model\Session $catalogSession,
    \Magento\Store\Model\StoreManagerInterface $storeManager,        
    array $data = []

)
{
    parent::__construct($context, $data);
    $this->_catalogSession = $catalogSession;
    $this->_storeManager = $storeManager;      
}

답변:


12

\Magento\Store\Model\StoreManagerInterface부모 클래스가 이미 그렇게하기 때문에 생성자 에 주입 할 필요가 없습니다 .

Magento\Framework\View\Element\Template이미 다음 코드가있는 블록이 확장되었다고 가정합니다 .

protected $_storeManager;

public function __construct(Template\Context $context, array $data = [])
{
    $this->validator = $context->getValidator();
    $this->resolver = $context->getResolver();
    $this->_filesystem = $context->getFilesystem();
    $this->templateEnginePool = $context->getEnginePool();
    $this->_storeManager = $context->getStoreManager();
    $this->_appState = $context->getAppState();
    $this->templateContext = $this;
    $this->pageConfig = $context->getPageConfig();
    parent::__construct($context, $data);
}

따라서 코드를 다음과 같이 바꿀 수 있습니다.

public function __construct(
    \Magento\Framework\View\Element\Template\Context $context,
    \Magento\Catalog\Model\Session $catalogSession,   
    array $data = []

)
{
    parent::__construct($context, $data);
    $this->_catalogSession = $catalogSession;
}

3
아 ... 13 초가 너무 늦었다.
Marius

@ 마리우스 하하. 영어가 아닌 두 명의 비영어권자가 같은 것을 어떻게 설명하는지 보는 것은 여전히 ​​흥미 롭습니다.
Digital Pianism의 Raphael

@ 마리우스와 라파엘 +2. 너무 빨리.
Khoa TruongDinh

5

\Magento\Store\Model\StoreManagerInterface $storeManager클래스에 대한 종속성으로 추가 할 필요는 없습니다 .
이미의 inplementation에 액세스 할 수 있습니다 StoreManagerInterface에서 Magento\Framework\View\Element\Template\Context클래스를.
이것을보십시오 .

따라서 생성자를 다음과 같이 만들 수 있습니다.

public function __construct(
    \Magento\Framework\View\Element\Template\Context $context,
    \Magento\Catalog\Model\Session $catalogSession,
    array $data = []

)
{
    parent::__construct($context, $data);
    $this->_catalogSession = $catalogSession;
}

그리고 당신은 여전히 storeManager이와 같은 멤버 변수 에 액세스 할 수 있습니다 $this->_storeManager.


5

Contextobject ( \Magento\Framework\View\Element\Template\Context) 에서 다음 방법을 사용할 수 있습니다

print_r(get_class_methods($context))

Array
(
    [0] => __construct
    [1] => getResolver
    [2] => getValidator
    [3] => getFilesystem
    [4] => getLogger
    [5] => getViewFileSystem
    [6] => getEnginePool
    [7] => getAppState
    [8] => getStoreManager
    [9] => getPageConfig
    [10] => getCache
    [11] => getDesignPackage
    [12] => getEventManager
    [13] => getLayout
    [14] => getRequest
    [15] => getSession
    [16] => getSidResolver
    [17] => getScopeConfig
    [18] => getInlineTranslation
    [19] => getUrlBuilder
    [20] => getAssetRepository
    [21] => getViewConfig
    [22] => getCacheState
    [23] => getEscaper
    [24] => getFilterManager
    [25] => getLocaleDate
)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.