Насколько идеалогически правильно, делать собственные классы viewModel, чтобы вынести в них логику представления и сделать шаблоны почище ?
Например так:
Контроллер
public function indexAction()
{
$products = new ProductsCollection;
$vm = new ProductsViewModel($products);
return $vm;
}
ViewModel
class ProductsViewModel extends ViewModel
{
public function __construct(ProductsCollection $products)
{
$items = array();
foreach ($products as $product) {
$items[] = [
'url' => '/product/' . $product['id'],
'price' => !empty($product['price']) ? \number_format($product['price'], 2, ',', ' ') : '',
'title' => $product['title'],
'class' => empty($product['hot-price']) ? '' : 'active',
'showCartBtn' => !empty($product['price'])
];
}
$this->setVariable('items', $items);
}
}
Шаблон
<ul>
<?php foreach ($items as $item): ?>
<li>
<div>
<a href="<?= $this->escapeHtml($item['url']) ?>" class="<?= $item['class'] ?>">
<?= $item['title'] ?>
</a>
</div>
<div>
<?php if ($item['showCartBtn']):?>
<form method="post">
<button type="submit" class="btn btn-primary">
Купить за <?= $item['price'] ?>
</button>
</form>
<?php else:?>
<button type="submit" class="btn">
Нет в продаже
</button>
<?php endif;?>
</div>
</li>
<?php endforeach; ?>
</ul>