Tôi dường như đang vật lộn để nắm bắt việc tiêm phụ thuộc Magento 2 với các khối, mỗi lần tôi cố gắng mở rộng một khối không phải là \ Magento \ Framework \ View \ Element \ Template tôi sẽ gặp lỗi.
Tôi muốn tạo một khối mở rộng lớp khối rất cơ bản của Magento \ Theme \ Block \ Html \ Header \ Logo - mọi thứ đều hoạt động tốt cho đến khi tôi thử tiêm phụ thuộc trong phương thức xây dựng:
<?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);
}
}
Ngay khi tôi cố gắng tiêm lớp người trợ giúp của mình (hoặc bất cứ điều gì khác cho vấn đề đó, tôi nhận được một dấu vết ngăn xếp bắt đầu với lỗi sau:
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
Nếu tôi thêm các phụ thuộc tương tự vào __construct của mình khi tệp tôi mở rộng từ nó hoạt động, nhưng chắc chắn đó là cách làm ngược lại như điểm kế thừa lớp là tôi có hấp thụ tất cả các phương thức và thuộc tính của cha mẹ không?
Tôi nghĩ rằng tôi chỉ cần một lời giải thích 101 cơ bản từ một người nào đó về việc mở rộng từ các lớp học và sử dụng DI với Magento 2. Bất kỳ trợ giúp nào cũng được đánh giá cao!