Задать вопрос

Зачем в yii2 классы и объекты для генерации html?

Извините, но никак не могу понять, на кой хер нужны всяческие классы типа Modal или Html?

Я может чего-то недопонимаю, но как-то привычнее и понятнее видеть что-то вроде:
echo '<a class="btn btn-success" href="/index.php?r=/client/create">Добавить клиента</a>';


Нежели:
<?= Html::a('Добавить клиента', ['create'], ['class' => 'btn btn-success']) ?>
  • Вопрос задан
  • 3631 просмотр
Подписаться 6 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 4
MrLoki
@MrLoki
I will.
Ну вы даёте, одну из толковых частей фреймворка обзываете.
В большом и сложном проекте, как правило, есть большая и сложная логика, а большая и сложная логика — предполагает большие и сложные условия. Городить условия во view — дело неблагодарное, потому что view — только представление и ничего больше, и чем оно проще тем лучше.

Далее по списку.
Вы в своем примере в HTML совершили ошибку, которая будет стоить вам гибкости.
href="/index.php?r=/client/create"
Тут должен быть использован генератор url, но тогда код становится уже сложнее и козырнуть «простотой и понятностью» не выйдет, не так ли? Это позволяет, например на начальном этапе не париться о «красивых» URL, ссылаясь на action/controller, а ближе к концу за 1 раз настроить роутинг по всему проекту, ничего не меняя во вью.

Попробуйте нарисовать checkbox в html. Не простой, а выбранность которого будет зависеть, от параметра модели. Я подскажу:
<input type="checkbox" value="1" name="name" <?php if($model->selected) ?>checked <?php endif ?>>

Уже не так красиво?
Ещё можете нарисовать select чтоб уж совсем убедиться в необходимости Html-хелпера.

Сейчас вы можете сказать, про вынесение генерации HTML в файлы, но я вас заверю. Во-первых это породит либо множество файлов и кучу условий (одна форма с кастомным select другая со стоковым, но с label, у третьей ещё что-то), и подключение этой кучи файлов будет выполняться дольше, а без компиляции шаблонов — постоянно дольше. Во-вторых, вы снова теряете в гибкости.

В Yii есть проблемы, но хелпер Html — не одна из них.
Ответ написан
Комментировать
Zhandos
@Zhandos
Классы-хелперы нужны для динамической генерации html. Допустим если тот или иной атрибут имеет параметры зависимые от ситуации. Не будешь же ты лапшу строить из php и html... хотя кто знает :-) .
Так же как бонус, это стабильность и тестируемость виджетов. Т.к. в виджетах юзаются эти хелперы, и разработчики 100% знают как они себя ведут, т.к. для них уже написаны юнит тесты
Ответ написан
Комментировать
как раз неделю назад, делая данный виджет, вспоминал подобный вопрос на форуме yii.
https://github.com/zelenin/yii2-recaptcha-widget/b...
представьте как бы вы собирали этот div и его атрибуты в зависимости от указания их в настройках.
div' . (isset($this->dataKey) ? ' data-key="blabla"' : ''). ' и так еще все атрибуты, классы, айдишники итд. Это неудобно, неюзабельно, трудно отслеживать ошибки.
Ответ написан
Комментировать
twixoff
@twixoff
Скорее дело вкуса. Хотя бывают ситуации когда много php в атрибутах того же тега "a" и удобнее будет через Html::a.
Также есть много методов для генерации bootstrap элементов, что очень упрощает жизнь в случае разработки какой-нибудь админки, если вы не фронтендер)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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