@magary4

Как спроектировать рендеринг класса?

есть некий класс допустим Product

в зависимости от своего состояния он должен быть отрендерен в разных шаблонах

{% for product in products %}
. . .
{% endfor %}

вот у меня цыкл который итерирует 10 продуктов, поля каждого каждый надо проанализировать и в зависимости от состояния полей выбрать соответствующий шаблон. т.е. в теории может получится что 10 разных теплейтов отрендерятся
анализ каждого инстанса это не только проверка значений полей- возможно надо будет сделать запрос в бд не лежит ли этот продукт в корзине и т д

где должна быть эта логика? что должно быть в теле цикла?
хелпер?
{{ render_product(item) }}

или добавить этот метод в сам класс?
{{ item->render() }}

или еще как?

Спасибо
  • Вопрос задан
  • 161 просмотр
Решения вопроса 1
prototype_denis
@prototype_denis
Symfony
Перед выводом на рендер, отдайте Product какому-нибудь сервису "хэлперу", который собственно и разрулит 100500 состояний сущности.

В самом же шаблоне этого делать не стоит - в нём просто в зависимости от состояния выводим тот или иной шаблон.
<?php
class Product {
    private $name;
}

class ProductState
{
    public function __construct(Product $product) {
        $this->product = $product;
    }

    public function getViewMetadata() {
        // Magic
    }
}

{% for productState in productStates %}
    {{ productState.name }}
    {% include productState.viewMetadata.template with productState.viewMetadata.data %}
{% endfor %}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
DiState Санкт-Петербург
от 80 000 до 140 000 руб.
AGIMA Москва
от 180 000 руб.
19 окт. 2019, в 02:31
3500 руб./за проект
19 окт. 2019, в 01:07
60000 руб./за проект
18 окт. 2019, в 23:45
150000 руб./за проект