यद्यपि अन्य उत्तर सही हैं, वे अनुशंसित / उचित समाधान नहीं हैं।
Magento 2 में ObjectManager का उपयोग पूरी तरह से निषिद्ध है। इसलिए कृपया इस समाधान पर भरोसा न करें, लेकिन इसके बजाय इसे प्राप्त करने के लिए उचित DI का उपयोग करें। Magento 2 में DI का उपयोग करने का तरीका जानने के लिए, यह संसाधन देखें: http://devdocs.magento.com/guides/v2.0/extension-dev-guide/depend-inj.html
AbstractView का विस्तार करना आवश्यक नहीं है। यदि आप AbstractView में मूल फ़ंक्शन को देखते हैं, तो आप देख सकते हैं कि उत्पाद को लाने के लिए Magento रजिस्ट्री का उपयोग करता है। आपको ऐसा करने के लिए एक विशिष्ट वर्ग का विस्तार करने की आवश्यकता नहीं है, बस अपने निर्माता में Magento के फ्रेमवर्क \ रजिस्ट्री को इंजेक्ट करें और "उत्पाद" रजिस्ट्री आइटम का अनुरोध करें।
पूर्ण कोड उदाहरण:
<?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