Skip to content

Working with View Models

We like Magento view models a lot! In comparison to custom block classes, they are more reusable and composable. You can add an arbitrary number of view models to any template block via layout XML.

But after introducing a bunch of useful view models in Hyvä we got tired of all that seemingly unnecessary XML and thought of a simpler solution:

The View Model Registry

In a Hyvä theme, in every template, a variable $viewModels is automatically available, introduced by hyva-themes/magento2-theme-module, similar to the existing $block and $escaper variables. You can use it to fetch any view model (i.e. any class that implements ArgumentInterface).


/** @var \Hyva\Theme\Model\ViewModelRegistry $viewModels */
$currentProduct = $viewModels->require(\Hyva\Theme\ViewModel\CurrentProduct::class);


It is no longer needed to declare view models in XML!

You can read more about the usage of ViewModels versus Blocks here: - View Models in Magento 1 and 2.

View Model Cache Tags

View models are often used to provide data to be rendered in a template.

In case you need the cache tags from some entities to be included in the HTTP response for the FPC cache record, you can implement the Magento\Framework\DataObject\IdentityInterface and return the required cache tags.
They will be included in the HTTP response X-Magento-Tags header automatically.

For more information have a look at the in depth documentation.