Magento 2 – Where Are Methods Declared for $_product->getResource()->getAttribute($_code)->getFrontend()->getValue($_product)

magento2methodsobjectproduct

lets say in my catalog_product_view.xml I have this additional Block:

<block class="Magento\Catalog\Block\Product\View\Description" name="product.info.demo" template="product/view/warranty.phtml" after="product.info.price">

in warranty.phtml I use the following:

$_product = $block->getProduct();
$_attributeLabel = $_product->getResource()->getAttribute($_code)->getFrontendLabel();
$_attributeValue =$_product->getResource()->getAttribute($_code)->getFrontend()->getValue($_product);

In the block class Description.php:

 public function getProduct()
{
    if (!$this->_product) {
        $this->_product = $this->_coreRegistry->registry('product');
    }
    return $this->_product;
}

We use getProduct() to get product object from registry.

Info: This product object was earlier first obtained and then put in the registry, in class Magento\Catalog\Helper\Product:

     ...       
    try {
             //productRepository is Catalog\Api\ProductRepositoryInterface
            //getById() returns \Magento\Catalog\Api\Data\ProductInterface
        $product = $this->productRepository->getById($productId, false, $this->_storeManager->getStore()->getId());
    } catch (NoSuchEntityException $e) {
        return false;
    }
    ...
         //put obtained product object into registry
    $this->_coreRegistry->register('product', $product);

Method getById() in Catalog\Api\ProductRepositoryInterface:

     * @param int $productId
 * @param bool $editMode
 * @param int|null $storeId
 * @param bool $forceReload
 * @return \Magento\Catalog\Api\Data\ProductInterface
 * @throws \Magento\Framework\Exception\NoSuchEntityException
 */
public function getById($productId, $editMode = false, $storeId = null, $forceReload = false);

Soo: our product-object in warranty.phtml $_product = $block->getProduct(); should be \Magento\Catalog\Api\Data\ProductInterface right ?

Also:
In warranty.phtml we call $_attributeValue =$_product->getResource()->getAttribute($_code)->getFrontend()->getValue($_product); , but there are no such methods defined in \Magento\Catalog\Api\Data\ProductInterface. Where are these methods declared/implemented ??

Best Answer

Your product object is actually an instance of \Magento\Catalog\Model\Product that implements the product interface.
And this class contains the methods you need.

Related Topic