nepster-web
@nepster-web

Кто должен брать на себя обязанность хелпера?

Собственно пытаюсь двигаться в сторону хорошего кода и хочу раз и на всегда решить головную боль с хелперами.
Предположим есть следующая ситуация: Нужно отрендерить данные товара в виде.

У нас есть сущность:
class Product {

    protected $name;
    protected $description;
    protected $price;
    protected $amount;

    public function setName($name)
    {
        ...
    }

    public function setDescription($description)
    {
        ...
    }

    public function setPrice($price)
    {
        ...
    }

    public function setAmount($amount)
    {
        ...
    }

    public function getName()
    {
        ...
    }

    public function getDescription()
    {
        ...
    }

    public function getPrice()
    {
        ...
    }

    public function getAmount()
    {
        ...
    }
    
}


Все хорошо все здорово. Теперь задача показать данные товара на странице. Тут возникают следующие вопросы:
- Мультиязычность (все не так плохо, мы можем засетить нашу сущность уже нужными данными, которые были получены ранее)
- Цена. К примеру я хочу видеть не 1210.23783, а $ 1 210.24. Тоесть потребуется использовать хелпер, который приведет float в читабельную строку.
- Количество, тоже самое хочу видеть не 435435, а 435 435 единиц (к примеру)

Конечно все эти хелперы уже у нас есть и код в виде может выглядеть вот так:
<p class="price">{{ Currency::formatString($product->getPrice()) }}</p>

Однако не всегда бывает удобно протаскивать хелперы в вид. Особенно если используется какой-то шаблонизатор и тп.
Было бы куда удобнее сделать, что-то такое:
<p class="price">{{ $product->getPriceString() }}</p>


Где метод $product->getPriceString() возвращает то что нам нужно. Тут получается 2 проблемы:
- Сущность становится зависимой от хелпера.
- Что если к примеру для админки нужно другое отображение. Ну скажем, если кол-во меньше 10, то подсветить красным цветом?

Подскажите пожалуйста как вообще правильно решать подобные вещи, отдельно хелперами во вьюшке или все-же можно засунуть дополнительные методы в сущность ?
  • Вопрос задан
  • 306 просмотров
Пригласить эксперта
Ответы на вопрос 1
dmitriylanets
@dmitriylanets
веб-разработчик
данные в модели должны быть такие какие есть , форматировать нужно на уровне вывода
например есть места где нужно выводить дату допустим в формате d.m.Y H:i а где d.m.Y, а где вообще в Y-m-d H:i
вы же не будите держать 3 метода для вывода этих дат
лучше $model->getDateTime()->format("d.m.Y H:i");//где $model->getDateTime() отдает объект Datetime
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы