Magento 2 우선 순위를 사용하여 블록을 오버라이드합니다
-
13-12-2019 - |
문제
블록 재정의에 관한 도움이 필요합니다. 필자는 기본 설정을 사용하여 블록을 성공적으로 무시했지만 Construct 메서드에 핵심 레지스트리를 추가 할 때 다음 오류가 표시됩니다.
Recoverable Error: Argument 2 passed to Magento\Catalog\Block\Product\ProductList\Toolbar::__construct() must be an instance of Magento\Catalog\Model\Session, array
.
이것은 내 코드입니다 :
namespace Vendername\Modulename\Block;
use Magento\Framework\View\Element\Template;
use Magento\Framework\Registry;
class Toolbar extends \Magento\Catalog\Block\Product\ProductList\Toolbar
{
protected $_registry;
public function __construct(
\Magento\Framework\View\Element\Template\Context $context,
Registry $registry,
array $data = []
) {
$this->_registry = $registry;
parent::__construct($context, $data);
}
public function getCurrentMode()
{
$category = $this->_registry->registry('current_category');
print_r($category->getId());
exit;
$mode = $this->_getData('_current_grid_mode');
if ($mode) {
return $mode;
}
$defaultMode = $this->_productListHelper->getDefaultViewMode($this->getModes());
$mode = $this->_toolbarModel->getMode();
if (!$mode || !isset($this->_availableMode[$mode])) {
$mode = $defaultMode;
}
$this->setData('_current_grid_mode', $mode);
return $mode;
}
}
.
레지스트리 와이 행을 제거하면 재정의가 작동 중입니다.
해결책
도구 모음 블록이 많은 종속성을 가지고 있지만
를 통과하지 못하는 문제처럼 보입니다.public function __construct(
\Magento\Framework\View\Element\Template\Context $context,
\Magento\Catalog\Model\Session $catalogSession,
\Magento\Catalog\Model\Config $catalogConfig,
ToolbarModel $toolbarModel,
\Magento\Framework\Url\EncoderInterface $urlEncoder,
ProductList $productListHelper,
\Magento\Framework\Data\Helper\PostHelper $postDataHelper,
array $data = []
)
.
그러나 클래스를 덮어 쓰려면 "환경 설정"을 사용하여 전혀 나쁜 생각입니다.플러그인이나 레이아웃을 더 잘 사용하면 필요한 것에 달려 있습니다.
제휴하지 않습니다 magento.stackexchange