다른 답변은 정확하지만 권장 / 적절한 해결책도 아닙니다.
Magento 2에서는 ObjectManager를 사용하는 것이 절대 금지되어 있습니다. 따라서이 솔루션에 의존하지 말고 대신 적절한 DI를 사용하십시오. Magento 2에서 DI를 사용하는 방법을 알아 보려면 다음 리소스를 참조하십시오. 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