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