How to get current product in phtml without registry?

My firm recently contacted Magento about this. According to them, there is no alternative way implemented yet.


I recently moved to Magento 2.3.2, and I had the same question

After reading this allready pointed out article (thanks https://magento.stackexchange.com/users/31910/shoaib-munir)

https://www.atwix.com/magento-2/alternatives-for-deprecated-registry-class-magento-2-3/

I found this implementation by @Vinai Kopp (https://github.com/Vinai)

https://github.com/Vinai/module-current-product-example

Basically, this trigger an observer based catalog_controller_product_init_after event for grabbing the actual displayed product and push the result into a custom registry

So after that, you can have it in your Block like the below code, or use ViewModel as suggested by @Vinai

<?php
namespace Vendor\Module\Block;

use Magento\Framework\View\Element\Template;
use Vendor\Module\Registry\CurrentProduct;

class YourBlock extends Template
{

    /**
     * @var CurrentProduct
     */
    private $_currentProduct;

    public function __construct(
        Template\Context $context,
        ...
        CurrentProduct $currentProduct,
        array $data)
    {
        $this->_currentProduct  = $currentProduct;
        parent::__construct($context, $data);
    }


    public function getCurrentProduct()
    {
            return $this->getProductId();
    }


    /**
     * @return mixed
     */
    private function getProductId()
    {
        return $this->_currentProduct->get()->getId();
    }

}

you could also return the full product, but not sure, that is really needed

    public function getCurrentProduct()
    {
            return $this->_currentProduct->get();
    }

Hope this helps,


try something like this:

$myBlock = \Magento\Framework\App\ObjectManager::getInstance()->get('Magento\Catalog\Model\Session')->getData('last_viewed_product_id');

I found an article for depreciated registry in Magento 2.3. It is getting category from catalog session, I don't know if my code works or not but from this you will have a path where you need to do some debugging

Reference: https://www.atwix.com/magento-2/alternatives-for-deprecated-registry-class-magento-2-3/