แม้ว่าคำตอบอื่น ๆ นั้นถูกต้อง แต่ก็ไม่ได้เป็นคำแนะนำที่เหมาะสม
การใช้ ObjectManager นั้นเป็นสิ่งต้องห้ามใน Magento 2 ดังนั้นโปรดอย่าพึ่งพาโซลูชันนี้ แต่ใช้ DI ที่เหมาะสมเพื่อให้ได้สิ่งนี้แทน หากต้องการเรียนรู้วิธีใช้ DI ใน Magento 2 ดูแหล่งข้อมูลนี้: http://devdocs.magento.com/guides/v2.0/extension-dev-guide/depend-inj.html
ไม่จำเป็นต้องขยาย AbstractView หากคุณดูที่ฟังก์ชั่นดั้งเดิมใน AbstractView คุณจะเห็น Magento ใช้รีจิสทรีเพื่อดึงข้อมูลผลิตภัณฑ์ คุณไม่จำเป็นต้องขยายคลาสเฉพาะเพื่อทำสิ่งนี้เพียงแค่ฉีด Magento \ Framework \ Registry ลงในคอนสตรัคเตอร์ของคุณและขอรายการรีจิสตรี "ผลิตภัณฑ์"
ตัวอย่างรหัสแบบเต็ม:
<?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()
ในMagento\Catalog\Block\Product\View