In this blog, we are going through how to use the view model in Magento 2.

ViewModel allows passing data and additional functionality to the template file without using a block, or object manager. Use a view model when product data and customer data are required in the front end.

This is the best functionality to pass data and show it in the front end.

⇒ let’s start, first of all, you create this file “default.xml” in this path “app/code/vendorname/ModuleName/view/frontend/layout/

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation=
"urn:magento:framework:View/Layout/etc/page_configuration.xsd">  
  <body>
    <referenceBlock name="catalog.topnav" template="VendorName_ModuleName::test.phtml">
       <arguments>
         <argument name="viewModel" xsi:type="object">VendorName\ModuleName\ViewModel\Test</argument>
       </arguments>
    </referenceBlock>
  </body>
</page>

⇒ Then after you create this file “Test.php” in this path “app/code/VendorName/ModuleName/ViewModel/ “.

<?php
namespace VendorName\ModuleName\ViewModel;

class Test implements \Magento\Framework\View\Element\Block\ArgumentInterface
{
    /**
     * @var \Magento\Customer\Model\CustomerFactory
     */
    protected $customerFactory;
    /**
     * @param \Magento\Catalog\Model\CustomerFactory     $customerFactory
     */
    public function __construct(
        \Magento\Catalog\Model\CustomerFactory $customerFactory
    ) {
        $this->customerFactory = $customerFactory;
    }
    public function getCustomerById($id) {
        $customerObj = $this->customerFactory->create()->load($id);
        return $customerObj;
    }
}

⇒ then after you create a template file “test.phtml” in this path “app\code\Vendor\Extension\view\frontend\templates\“.

<?php 
   $viewModel = $block->getViewModel();
   echo $viewModel->getSomething();
?>

⇒ I hope you understand this blog. if you have any questions let me know in the comment section

Thank You !!

Leave a Reply

Your email address will not be published. Required fields are marked *

CynoInfotech was founded in 2019, in Ahmedabad, Gujrat. CynoInfotech is a Magento module development company that grow up over this year with outsourcing clients.