Size: a a a

2019 September 25

PC

Pavel Chaplygin in Yii Framework 3
Всем привет.
Вопрос по реализации виджетов. Точнее, конфигурации при вызове.
На данный момент есть два варианта. Первый - подход из Yii2:
<?= FooWidget::widget([
   'param' => 'value',
   // ...
]) ?>

Второй - реализованный сейчас в некоторых виджетах для третьей версии:
<?= FooWidget::widget($this)->param('value') ?>

Если интересны подробности идругие детали реализации, в пакете https://github.com/yiisoft/view есть issue (55) и реквест (56) с обсуждением.
Здесь же просто спрошу, кому какой вариант кажется предпочтительнее.
источник

GE

Grisha Egorov in Yii Framework 3
Конечно новый, не люблю магию
источник

OK

Oleg Kuzmenko in Yii Framework 3
Первый вариант лучше и вот почему: виджеты вызываются во вьюхах, следовательно — их вызовы и конфигурация не должна быть вырвиглазной относительно ХТМЛ. Если параметров много, то штука вида

<div><?= Widget($this)->param('value')->param2('value2'); ?></div>

будет выглядеть стремновато.
источник

OK

Oleg Kuzmenko in Yii Framework 3
Grisha Egorov
Конечно новый, не люблю магию
Тогда следует от Yii отказаться.
источник

T🐜

The Ant 🐜 in Yii Framework 3
Oleg Kuzmenko
Первый вариант лучше и вот почему: виджеты вызываются во вьюхах, следовательно — их вызовы и конфигурация не должна быть вырвиглазной относительно ХТМЛ. Если параметров много, то штука вида

<div><?= Widget($this)->param('value')->param2('value2'); ?></div>

будет выглядеть стремновато.
плюсую
источник

GE

Grisha Egorov in Yii Framework 3
Я отказался, но есть шанс вернуться. А с нормальным форматированием все будет ок.
источник

T🐜

The Ant 🐜 in Yii Framework 3
Grisha Egorov
Я отказался, но есть шанс вернуться. А с нормальным форматированием все будет ок.
в пользу чего?
источник

PC

Pavel Chaplygin in Yii Framework 3
Oleg Kuzmenko
Первый вариант лучше и вот почему: виджеты вызываются во вьюхах, следовательно — их вызовы и конфигурация не должна быть вырвиглазной относительно ХТМЛ. Если параметров много, то штука вида

<div><?= Widget($this)->param('value')->param2('value2'); ?></div>

будет выглядеть стремновато.
Не уверен, что огромные массивы конфигурации во вьюхах выглядят лучше. Во втором варианте хотя бы сразу понятно, что за параметр передаётся, а в первом надо сначала понять, на каком уровне вложенности этот параметр находится.
источник

T🐜

The Ant 🐜 in Yii Framework 3
виджеты как идея - дерьмо так-то )
источник

Y

YZ4 in Yii Framework 3
согласен с Олегом, но на мой взгляд, их можно совсем убрать, в пользу рендерига другой вьюшки
источник

PC

Pavel Chaplygin in Yii Framework 3
А в пользу первого варианта можно сказать, что объекты виджетов получаются неизменяемыми. Иммутабельность - это хорошо.
источник

OK

Oleg Kuzmenko in Yii Framework 3
Pavel Chaplygin
Не уверен, что огромные массивы конфигурации во вьюхах выглядят лучше. Во втором варианте хотя бы сразу понятно, что за параметр передаётся, а в первом надо сначала понять, на каком уровне вложенности этот параметр находится.
Да ладно, оно себе в столбик ровненько идет и все отлично видно. Гармонично вписывается в хтмл.
источник

OK

Oleg Kuzmenko in Yii Framework 3
YZ4
согласен с Олегом, но на мой взгляд, их можно совсем убрать, в пользу рендерига другой вьюшки
Виджет это и делает.
источник

PC

Pavel Chaplygin in Yii Framework 3
Oleg Kuzmenko
Да ладно, оно себе в столбик ровненько идет и все отлично видно. Гармонично вписывается в хтмл.
Ну так и вызовы сеттеров можно аккуратно в столбик запистаь
источник

Y

YZ4 in Yii Framework 3
Oleg Kuzmenko
Виджет это и делает.
ну вот и смысл =)
источник

PC

Pavel Chaplygin in Yii Framework 3
YZ4
ну вот и смысл =)
Смысл в том, что при наличии логики этой вьюшке не помешал бы контроллер.
источник

PC

Pavel Chaplygin in Yii Framework 3
Вот и получается виджет.
источник

T🐜

The Ant 🐜 in Yii Framework 3
Pavel Chaplygin
Ну так и вызовы сеттеров можно аккуратно в столбик запистаь
можно оставить сеттеры, в любом случае при инициализации виджета дефолтный конфиг грузится и сеттится потом в ините\конструкторе.
источник

PC

Pavel Chaplygin in Yii Framework 3
Кстати, если что — я не являюсь автором ни одного варианта :)
источник

GE

Grisha Egorov in Yii Framework 3
+ типизация нормальная добавится
источник