Mặc dù các câu trả lời khác là chính xác, chúng cũng không phải là giải pháp được đề xuất / phù hợp.
Sử dụng ObjectManager hoàn toàn bị cấm trong Magento 2. Vì vậy, vui lòng không dựa vào giải pháp này mà hãy sử dụng DI thích hợp để đạt được điều này thay vào đó. Để tìm hiểu cách sử dụng DI trong Magento 2, hãy xem tài nguyên này: http://devdocs.magento.com/guides/v2.0/extension-dev-guide/depend-inj.html
Mở rộng AbstractView là không cần thiết. Nếu bạn nhìn vào chức năng ban đầu trong Tóm tắt, bạn có thể thấy Magento đã sử dụng sổ đăng ký để tìm nạp sản phẩm. Bạn không cần phải mở rộng một lớp cụ thể để làm điều này, chỉ cần tiêm Magento \ Framework \ Registry vào hàm tạo của bạn và yêu cầu mục đăng ký "sản phẩm".
Ví dụ mã đầy đủ:
<?php
// Example = Module namespace, Module = module name, rest of the namespace is just for example only, change this to whatever it is in your case.
namespace Example\Module\Block\Frontend\Catalog\Product\General;
use Magento\Catalog\Model\Product;
use Magento\Framework\Exception\LocalizedException;
use Magento\Framework\Registry;
use Magento\Framework\View\Element\Template;
class Information extends Template
{
/**
* @var Registry
*/
protected $registry;
/**
* @var Product
*/
private $product;
public function __construct(Template\Context $context,
Registry $registry,
array $data)
{
$this->registry = $registry;
parent::__construct($context, $data);
}
/**
* @return Product
*/
private function getProduct()
{
if (is_null($this->product)) {
$this->product = $this->registry->registry('product');
if (!$this->product->getId()) {
throw new LocalizedException(__('Failed to initialize product'));
}
}
return $this->product;
}
public function getProductName()
{
return $this->getProduct()->getName();
}
}
getProduct()
trongMagento\Catalog\Block\Product\View