49
loading...
This website collects cookies to deliver better user experience
<?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">
<referenceContainer name="content">
<block name="{block_name}" template="{Vendor_Module}::{path}/{file_name}.phtml">
<arguments>
<argument name="{view_model_name}" xsi:type="object">{Vendor}\{Module}\ViewModel\{ClassName}</argument>
</arguments>
</block>
</referenceContainer>
</page>
\{Vendor}\{Module}\{Block}\{ClassName}.php
. Cada arquivo de ViewModel deve implementar a classe \Magento\Framework\View\Element\Block\ArgumentInterface
.<?php
namespace {Vendor}\{Module}\ViewModel;
use Magento\Framework\View\Element\Block\ArgumentInterface;
class {ClassName} implements ArgumentInterface
{
public function {methodName}(): {type}
{
// Code here
}
}
Caso o template não necessite de lógica, é recomendado não deixar o atributo class
no arquivo de layout ou criar um bloco e apenas extender a classe \Magento\Framework\View\Element\Template
, sem inserir nenhum método.
$block
com o método getData('{view_model_name}')
para acessar o argumento do arquivo layout, que retornará a classe ViewModel. E através do retorno dessa classe, teremos o acesso aos métodos da classe ViewModel.<?php
/**
* @var \{Vendor}\{Module}\Block\{BlockName} $block
* @var \{Vendor}\{Module}\ViewModel\{ClassName} $viewModel
*/
$viewModel = $block->getData('{view_model_name}');
$viewModel->{methodName}();
?>
Valores entre chaves ({test}
) devem ser alterados na implementação do código.
rm -rf var/generation/
rm -rf generated/
php bin/magento setup:di:compile
php bin/magento cache:clean
php bin/magento flush
- app/
- code/
- {Vendor}/
- {Module}/
- etc/
- module.xml
- view/
- {area}/
- layout/
- {router_id}_{controller_directory}_{controller_name}.xml
- templates/
- {paths}/
- {file_name}.phtml
- ViewModel/
- {ClassName}.php
- registration.php
- composer.json