Yii2, почему?!

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Yii2, почему?!

Сообщение samdark »

Многие хотят задать вопросы вида «почему в Yii2 сделали штуку X именно так». Задавайте. Я попробую ответить.
Skiller
Сообщения: 627
Зарегистрирован: 2011.11.27, 00:21

Re: Yii2, почему?!

Сообщение Skiller »

И самый актуальный вопрос от многих кто спрашивал:
почему echo в controller?
p.s. мне ок)
Аватара пользователя
r3verser
Сообщения: 195
Зарегистрирован: 2012.04.01, 17:29
Откуда: Киев

Re: Yii2, почему?!

Сообщение r3verser »

Вот это echo в экшенах имхо зло, ибо оно будет провоцировать начинающих выводить html и прочее без рендера. Зачем писать echo render(блабла) если можно просто echo '<html...>';. Чисто психологически как-то.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Yii2, почему?!

Сообщение samdark »

echo потому как удалось избавиться от параметра и непостоянного return. В итоге стало понятнее, что именно происходит и более стабильно.
Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: Yii2, почему?!

Сообщение lancecoder »

поиск, критерии, как теперь будет выглядеть "слепок" model_to_criteria?
п.с. вообще не понял этот шаг, у меня в каждой модели было, тольке не дп, а критерия с алиасами, как вх. параметр в функциию, по дефолту равно имени таблицы, и можно было легко делать поиск между таблиц $model1->getSearchCriteria()->mergeWith->( $model2->getSearchCriteria() );
Аватара пользователя
xoma
Сообщения: 641
Зарегистрирован: 2009.04.02, 15:24
Откуда: Ногинск
Контактная информация:

Re: Yii2, почему?!

Сообщение xoma »

И мне не совсем ясно для чего echo ....Можно пойти по пути Symfony и сделать return, но echo, внутри класса выглядит как-то не очень...

p.s. решается новым базовым контроллером и переопределением метода, но хотелось бы видеть красивости из коробки, конечно +)
Аватара пользователя
TBIKC
Сообщения: 133
Зарегистрирован: 2011.07.23, 16:30

Re: Yii2, почему?!

Сообщение TBIKC »

-В итоге стало понятнее, что именно происходит и более стабильно.
По моему и раньше было понятно что делает метод render

- echo \yii\widgets\Menu::widget($this, array('items' => $items));
Тоже какой то ужас, раньше было проще и красивее
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Yii2, почему?!

Сообщение slavcodev »

TBIKC писал(а):-В итоге стало понятнее, что именно происходит и более стабильно.
По моему и раньше было понятно что делает метод render
ИМХО это дело вкуса. Мне нравится. Читая код действия понятно что он выводит. Что там в render не всегда известно. Может метод переписан в базовом контролере.
- echo \yii\widgets\Menu::widget($this, array('items' => $items));
TBIKC писал(а):Тоже какой то ужас, раньше было проще и красивее
Что именно тут ужасного? echo? Совсем даже не ужасно. Избавились от третьего параметра который возвращал результат виджета вместо вывода. Теперь все работает однозначно, т.е. вывод. Очень часто нужно было результат виджета в переменную сохранять и потом вставлять.
Жду Yii 3!
Аватара пользователя
xoma
Сообщения: 641
Зарегистрирован: 2009.04.02, 15:24
Откуда: Ногинск
Контактная информация:

Re: Yii2, почему?!

Сообщение xoma »

Частично некрасивость синтаксиса вроде:

Код: Выделить всё

echo \yii\widgets\Menu::widget($this, array('items' => $items)); 
Может скрыть пхп своими тегами <?= ?>, но лично мне, все равно не ясно для чего было делать именно так.
В моих проектах в 90% случаях виджет рендерит свой кусок на страницу и лишь в 10% случаях я запихиваю вывод виджета в переменную и мне совсем было не сложно передать лишний параметр.
Первый параметр $this - уж точно нельзя назвать "новичок-френдли".
Грустно как-то =(
Аватара пользователя
kulikov
Сообщения: 3
Зарегистрирован: 2013.05.14, 11:02
Откуда: Россия, Ростов-на-Дону
Контактная информация:

Re: Yii2, почему?!

Сообщение kulikov »

@xoma, касательно $this - согласен на все 100%, так же как и насчёт того, что было не сложно передавать доп.параметр.
Использую yii почти во всех проектах и могу сказать, что прибегать к возврату данных вместо вывода мне приходилось не так уж часто.
Да, также согласен касательно 'echo' в контроллере. Это не самый лучший выход из ситуации и есть ведь на то причины.
Сколько смотрел на разные фреймворки, но остановился на yii именно благодаря его логичности и простоте. А сейчас всё сводится к простому переделыванию и переписыванию на другой лад.
Жаль, если разработчики не прислушаются к мнению сообщества, в этом плане будет действительно очень жаль.
Аватара пользователя
xoma
Сообщения: 641
Зарегистрирован: 2009.04.02, 15:24
Откуда: Ногинск
Контактная информация:

Re: Yii2, почему?!

Сообщение xoma »

Кроме того, теперь будет гораздо сложнее реализовать, как я их называю, "динамические" виджеты. К примеру у нас модульная система и все виджеты раскиданы по модулям.
На фронте мы используем виджеты из всех активных модулей, что произойдет если модуль отключить/удалить - класс виджета не будет найден и сайт упадет.
В Юпи! мы решили это вот так https://github.com/yupe/yupe/blob/maste ... er.php#L72 знаю, что не идеал, но оно работает.

Так как теперь появилься объект Вью, думаю что было бы логично отдать рендер виджета именно ему, те что-то типа:

Код: Выделить всё

$this->widget('Class',$params);
Только теперь у нас в $this не контроллер, как было раньше, а именно Вью-обект. Переопределяя вью и его методы работы с виджетами - можем получить, точнее не потерять, ту гибкость, которая есть сейчас....
Аватара пользователя
kulikov
Сообщения: 3
Зарегистрирован: 2013.05.14, 11:02
Откуда: Россия, Ростов-на-Дону
Контактная информация:

Re: Yii2, почему?!

Сообщение kulikov »

Соглашусь с @xoma. Не хочется брать готовый фреймворк и писать свои костыли на все случаи жизни. @Sam Dark Можем ли мы как то повлиять на ход разработки?
Аватара пользователя
TBIKC
Сообщения: 133
Зарегистрирован: 2011.07.23, 16:30

Re: Yii2, почему?!

Сообщение TBIKC »

Успех Yii 1 в том (на сайте так же написано), что он даёт нам лучшие возможности и удобства из различных фреймворков и систем.
Yii incorporates many ideas and work from other well-known Web programming frameworks and applications.

Сейчас он начинает равняться с другими, появляются лишние телодвижения в коде, идёт усложнение, а не на упрощение пользования

В чём успех Rails - пишешь меньше, получаешь больше, Yii 1 - в принципе следует этому
Что мы видим в Yii 2 ?
Аватара пользователя
kulikov
Сообщения: 3
Зарегистрирован: 2013.05.14, 11:02
Откуда: Россия, Ростов-на-Дону
Контактная информация:

Re: Yii2, почему?!

Сообщение kulikov »

TBIKC писал(а):Успех Yii 1 в том (на сайте так же написано)
Yii incorporates many ideas and work from other well-known Web programming frameworks and applications.
Что он даёт нам лучшие возможности и удобства из различных фреймворков и систем.

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

В чём успех Rails - пишешь меньше, получаешь больше, Yii 1 - стараемся так же делать
Что мы видим в Yii 2 ?
Да, согласен с вами. Есть такая беда. Сейчас появляется большое количество усложнений фреймворка, когда хотелось бы видеть оптимизацию, большую скорость работы и побольше плюшек. Будем ждать от Yii2 только лучшего =)
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Yii2, почему?!

Сообщение slavcodev »

Пока не одного аргумента, кроме привычек. Думаю это пройдет )
1) render в действии усложнял расширения контролера. Переопределить действие без бубна было не реально
2) c виджетам может еще подправят и добавят в View метод виджета, хотя не думаю что он нужен, мне не нравится классы строкой передавать

Код: Выделить всё

echo \yii\widgets\Menu::widget($this, array('items' => $items));
может выглядит ужасно, но если научится выносить неймспейсы в хидер файла то все отлично читается. Плюс избавились от парсинга строки каждый раз на поиск псевдонима путей

Код: Выделить всё

use yii\widgets\Menu;
echo Menu::widget($this, array('items' => $items));
Жду Yii 3!
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Yii2, почему?!

Сообщение samdark »

lancecoder, не понял вопроса про критерий.

Рано говорить, что Yii стал сложнее и т.д. Он ещё даже до альфы не добрался. Всё можно менять как угодно. Были бы идеи.

На ход разработки повлиять можно обсуждениями на github. Особенно, если чётко и по делу приводить примеры альтернативных решений, их объективные плюсы и минусы.

Виджеты

Виджеты сделали так чтобы:

1. Работало дополнение в IDE, проверка правильности написания класса, переход к классу.
2. Можно было сделать use в шапке и сократить имя виджета непосредственно при вызове.
3. Меньше работы коду.

$this, конечно, плохо выглядит, но как его не передавать не придумали пока. Если есть идеи — пишите.

«Дополнительные» echo

Как лучше сделать? Какие причины делать без echo, кроме привычки? Почему return лучше echo?
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Yii2, почему?!

Сообщение slavcodev »

Sam Dark писал(а):$this, конечно, плохо выглядит, но как его не передавать не придумали пока. Если есть идеи — пишите.

Код: Выделить всё

Yii::$app->controller->view
Жду Yii 3!
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Yii2, почему?!

Сообщение slavcodev »

Sam Dark писал(а):Как лучше сделать? Какие причины делать без echo, кроме привычки? Почему return лучше echo?
Я не знаю истинных причин echo в контроллере, выше ты как-то поверхностно ответил. Но для меня return лучше
  • Лучше расширяемость контроллеров. Но я уже слышал твое мнение что это не всегда хорошо. Но имхо при правильной архитектуры приложения, проблем не должно быть.
  • Меньше написанного кода (хотя я за этим слепо не гонюсь), но return может быть очень гибкий:
    • return array - это параметры View
    • return View - ясно его рендерим
    • return string - выводим текст
    • и даже return integer > 0 можно считать кодом ошибки
    в общем есть есть над чем пофантазировать
Жду Yii 3!
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Yii2, почему?!

Сообщение slavcodev »

mc-bear писал(а):

Код: Выделить всё

use yii\widgets\Menu;
echo Menu::widget($this, array('items' => $items)); 
кстати SamDark почему бы $this не убрать вторым параметром, так имхо логичнее, по аналогии с Object::__construct где первым идет массив настроек объекта.
Жду Yii 3!
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Yii2, почему?!

Сообщение samdark »

В случае 2) есть минус. return получается очень универсальный и многозначный. Куча всего происходит за нашей спиной и что именно происходит не ясно. Почему, например, я не могу сделать return Post::find(10)? return array — это параметры которого view? и т.д.
Ответить