Инструкции по установке и обновлению доступны по адресу http://www.yiiframework.com/download/.
Версия 2.0.6 является патч-релизом для ветки 2.0 и содержит более 70 небольших улучшений и исправлений, многочисленные улучшения документации и значительный прогресс с её переводом.
Спасибо всем, кто участвует в разработке фреймворка. Ваши pull-request-ы, обсуждения и другая помощь незаменимы.
За процессом разработки фреймворка можно следить поставив звёздочку или нажав кнопку «watch» на GitHub.
Также можно подписаться на наши Twitter и Facebook.
Далее представлен небольшой обзор самых интересных нововведений.
Улучшенный синтаксис миграций
Изначально мы планировали построитель схемы в версии 2.1, но pana1990 и vaseninm отлично поработали и теперь синтаксис в миграциях стал намного более приятным:
$this->createTable('example_table', [
'id' => $this->primaryKey(),
'name' => $this->string(64)->notNull(),
'type' => $this->integer()->notNull()->defaultValue(10),
'description' => $this->text(),
'rule_name' => $this->string(64),
'data' => $this->text(),
'created_at' => $this->datetime()->notNull(),
'updated_at' => $this->datetime(),
]);
Обработка ошибок
В данном релизе довольно много исправлений и улучшений, призванных сделать обработку ошибок ещё более стабильной и полезной:
— Yii теперь отлично справляется с фатальными ошибками HHVM.
— Если
FileCache
не сумел записать в файл, это будет видно в логах.—
yii\web\ErrorAction
теперь показывает 404, а не пустую страницу в случае прямого перехода по URL.— Когда
yii migrate
отказывается работать из за отсутствующей директории, путь к ней показывается в ошибке.—
Json::encode()
и Json::decode()
лучше обрабатывают ошибки, кидая понятные исключения.—
ErrorHandler::logException()
теперь логирует весь объект, а не только его строковое представление.Больше контроля над ActiveForm из JavaScript
Вы можете обновлять ошибки для определённых полей:
// добавить ошибку
$('#contact-form').yiiActiveForm('updateAttribute', 'contactform-subject', ["I have an error..."]);
// убрать ошибку
$('#contact-form').yiiActiveForm('updateAttribute', 'contactform-subject', '');
Или для всех полей и резюме сразу:
$('#contact-form').yiiActiveForm('updateMessages', {
'contactform-subject': ['Really?'],
'contactform-email': ['I don\'t like it!']
}, true);
Улучшения yii message
Теперь поддерживается создание файлов
.pot
.Команда теперь отлично переваривает вложенные вызовы:
Yii::t('app', 'There are new {messages} for you!', [
'messages' => Html::a(Yii::t('app', 'messages'), ['user/notifications']),
]);
Также теперь сортировка происходит даже при отсутствии новых строк, что позволяет получить меньший diff.
Кроме того, была добавлена опция
markUnused
, позволяющая отключить добавление @@
к неиспользуемым строкам.Asset-ы
Теперь можно настроить, что публиковать, а что нет:
class MyAsset extends AssetBundle
{
public $sourcePath = '@app/assets/js';
public $js = [
'app.js',
];
public $depends = [
'yii\web\YiiAsset',
];
public $publishOptions = [
'except' => '*.ts', // exclude TypeScript sources
// 'only' => '*.js', // include JavaScript only
];
}
Можно изменить алгоритм хеширования для имён директорий из
web/assets
. Сделать это можно прямо из конфигурации приложения:return [
// ...
'components' => [
'assetManager' => [
'hashCallback' => function ($path) {
return hash('md4', $path);
}
],
],
];
Дополнительные поля в хранилище сессий
Теперь вы можете легко хранить дополнительные данные в хранилище сессий. Пока поддерживается только
yii\web\DbSession
, но в будущем поддержка может быть расширена. Для конфигурации надо изменить конфигурацию приложения:return [
// ...
'components' => [
'session' => [
'class' => 'yii\web\DbSession',
'readCallback' => function ($fields) {
return [
'expireDate' => Yii::$app->formatter->asDate($fields['expire']),
];
},
'writeCallback' => function ($session) {
return [
'user_id' => Yii::$app->user->id,
'ip' => $_SERVER['REMOTE_ADDR'],
'is_trusted' => $session->get('is_trusted', false),
];
}
],
],
];
Комментарии (42)
Playbot
06.08.2015 09:42Формат миграций стал прям супер-супер, вот только возможность добавить комментарий (как-то так бы ->comment('комментарий')) не реализовали, интересно почему?
affka
06.08.2015 10:29pull request тебе в помощь :)
vaseninm
06.08.2015 10:34+1Парни из core team (@samdark и @cebe) скромно скрыли свой вклад в новые миграции)
MaxFactor
06.08.2015 18:47+1Я конечно рад, кто есть такой фрэймворк, но я считаю что он УБОГИЙ. За столько лет так и не смогли добавить нормальные виджеты для работы с временем, датой, датой и временем.
SamDark
06.08.2015 19:03Сможете более развёрнуто расписать? Что для вас «нормальные виджеты для работы с временем, датой, датой и временем» и чем не устраивают те, что уже есть?
MaxFactor
06.08.2015 20:00-1Легко, скачайте последнюю базовую версию Yii2+ установите и попробуйте через слой вывести input-виджеты время, дата, время и дата. Там только есть дата виджет и все станет ясно.
zelenin
06.08.2015 20:33+1через слой? Что есть слой?
В симфони вообще нет виджетов, а убогим его трудно назвать.
Да и виджеты времени — это обертки над сторонними виджетами, пишущимися за 10 минут. Так что такой аргумент в пользу убогости явно необъективен.
SonicGD
06.08.2015 20:35+1github.com/2amigos/yii2-date-time-picker-widget вам в помощь. Причём только тут фреймворк?
MaxFactor
06.08.2015 21:24-1А зачем мне фрэймворк в котором надо искать, перебирать и мострячить компонент который ОБЯЗАН быть в стандартной комплектации.
Вот пример:
— Не давно попросили сервис создать на Yii так я сервис писал 3 часа, а компоненты времени искал, перебирал и тестил 13 часов.
Зачем такой фреймворк. Одна из задач при создании фреймворка — это экономия времени, если Yii не экономит время вывод один — он убог. Зачем писать фреймворк где виджеты урезаны и нужно использовать сторонние? Ну сделали бы тогда без виджетов вообще или сделайте все базовые — почему надо не туда не сюда, как дороги в России, вроде есть, а вроде нет.Mendel
06.08.2015 22:37+1Это вы еще Ларавел не юзали…
Нужен RBAC — выбирай из восьми кастомных.
Шаблонизатор? Есть два встроенных, но большинство юзают твиг…
Хочешь собственный класс правил для урлменеджера? Придется писать не только рулсы но и сам урлменеджер. Ну и что, что ядро не умеет кастомные вещи, зато его просто переопределять. В юии есть из коробки? Так это потому что он кривой…
И так во всём. Во всём-всём… Как линунс времен 90-х.
У меня у самого много претензий к Юии, много чего не хватает, но цепляться к неполному набору виджетов в ядре? гм…
zelenin
06.08.2015 22:44начнем с того, что в стандартной комплектации наоборот не должно быть и тех виджетов, которые там есть сейчас. Это реверанс в сторону начинающих программистов, собственно из-за которых фреймворк так и популярен (также как и Ларавел).
Фреймворк должен решать более низкоуровневые потребности, чем удобный ввод даты в UI. А из вашего высказывания понятно, что вы путаете фреймворк с cms. На фреймворке программируют, а не собирают проект из плагинов.MaxFactor
06.08.2015 23:00Я полностью с Вами согласен. Но если бы не было этих виджетов я вообще никогда бы в Yii не полез.
«Фреймворк должен решать более низкоуровневые потребности, чем удобный ввод даты в UI» — спорный вопрос.zelenin
06.08.2015 23:06никапли не спорный. ru.wikipedia.org/wiki/%D0%A4%D1%80%D0%B5%D0%B9%D0%BC%D0%B2%D0%BE%D1%80%D0%BA
hlogeon
11.08.2015 18:00+2Мне кажется, вы таки зря полезли в Yii и не понимаете что есть Framework. PHP-фреймворк вообще может не содержать(я бы даже скорее сказал не должен содержать) UI-элементов.
clockworkbird
21.08.2015 11:55+1Вообще, лучше, чтобы фреймворком предлагались не только инструменты, но и какой-то вариант реализации (дополнительными приложениями, а не в ядре — идеально), и набором best practices.
Иначе слишком много приходится строгать.
Это проходил на собственном опыте при разработе на ZF1. Все можно сделать, но все нужно делать. В результате каждый делал по своему и ни о какой «питательной среде» не было и речи — результат — неплохой фреймворк фактически похоронен.
Фреймворк нужен для разработки проектов, а не разработки инструментов.
Поэтому и RoR настолько популярен. Этим и нравится Yii2.
SamDark
07.08.2015 16:23Так есть же
yii\jui\DatePicker
. Чем не оно?MaxFactor
07.08.2015 17:43работает только с датой, а с временем нет и дата-время тоже нет — это огорчает. Мне иногда надо сбацать быстро прототипный проект с базовым дизайном и когда касается работы со временем — начинается проблема.
Zhuravljov
10.08.2015 11:22+1JQueryUI, с учетом его распространенности, можно считать промышленным стандартом, и для него сделали расширение yii2-jui c полным набором виджетов. Но там никогда не было контрола для совмещенного ввода даты и времени. За то на стороне появился целый зоопарк таких плагинов. Странно ожидать официальной поддержки на все это многообразие.
Выберите любой, который лучше всего подходит для ваших проектов, и сделайте свою обертку. Это не сложно, и много времени не займет.
Или попробуйте github.com/zhuravljov/yii2-datetime-widgets. Делал для своего проекта когда в интерфейсе понадобился ввод даты-времени и временных интервалов.MaxFactor
10.08.2015 11:44-3Но сделать один среднечковый-стандартный виджет времени и включить его в базовую комплектацию — это не сильная проблема. А вот потратить день на перебор зоопарка и найти рабочий пример — это потеря времени.
Если бы я всегда работал с Yii то у меня был бы отсеян этот зоопарк компонент и я знал какие лучше, а какие нет. Но я с Yii работаю редко, раз в пол года и каждые пол года приходиться тратить время на поиск примитивного рабочего компонента.
Я понимаю в чем проблема Yii и могу решить ее сам, данный разговор я затеял не ради себя, в последнее время я использую свой фрэймворк на MVC модели Javascript+php / node Просто новички которые сталкиваются с Yii упарываются в эту же проблему со временем/датой. Мое мнение, или не включать тогда компоненты в фрэймворк или делать все базовые с возможностью установки внешних, а в данном случае разработчики остановились на середине.
Yii мне нравиться как сделан, удобно и понятно, с ним приятно работать. Я его не использую в коммерческих проектах, но делаю на нем демки-прототипы.
PS: Я нашел компонент который хотел, не надо мне давать ссылки.
clockworkbird
21.08.2015 11:23+1Вот уж убогим Yii2 никак назвать нельзя. И очень радует направление развития. Разработчикам огромное спасибо.
Так вот находятся люди, которые еще и ругают бесплатный, открытый продукт.
Если вам чего-то во фреймворке не хватает — ну сделайте хоть что-то сами и отправьте пулл реквест — будете и сами пользоваться, и все вам скажут спасибо.
После перехода с ZF1 (для которого писали сами и миграции, и кучу логики, и кучу компонент) в Yii2 пока не удается сделать ничего нового (даже обидно) — все уже есть или в коробке или в расширениях и работает на удивление хорошо.MaxFactor
21.08.2015 11:46«Если вам чего-то во фреймворке не хватает — ну сделайте хоть что-то сами и отправьте пулл реквест» — я нашел вариант получше — написал свой фрэймворк. Я указал на незначительную проблему Yii, об которую КАЖДЫЙ «ломает зубы».
Если продукт бесплатный — что у него не может быть проблем о которых стоит тут написать?SamDark
21.08.2015 12:19+1Ну, далеко не каждый. Далеко не всем нужны виджеты для времени и не для всех проблема выбрать из 5—6 вариантов. Но вообще про проблемы писать однозначно надо. И за это вам спасибо.
Mendel
21.08.2015 12:44+1Выбирать из 5-6 вариантов СИСТЕМНЫХ вещей это сакс. Выбирать из 5-6 вариантов простенького виджета который всегда можно переписать самому в случае проблем — элементарно.
С другой стороны при росте проекта оказывается что ты таких расширений поставил штук 18, они частично дублируют друг-друга, у каждого свой стиль, разные решения каких-то моментов, и разные отступления от бестпрактикс…
И тут уже стоишь перед выбором о том, чтобы рефакторить всё, чтобы упорядочить зоопарк, или поддерживать зоопарк…
В идеале конечно было бы иметь некую сертификацию расширений, чтобы были расширения с пометкой «рекомендуемое официально», но это уже фантастика :)SamDark
21.08.2015 13:12+2Это не фантастика, а планы ;)
Mendel
21.08.2015 15:46Это было бы очень приятно.
оффтоп: скажите, я правильно понимаю, что в двойке нет возможности как в первом получить информацию о связях модели по типу public function relations()?
К примеру у меня в 1.1 было расширение которое по наличию связи с User (при условии что таковая связь одна) создавала *Own действия в RBAC для CRUD.
Ну или к примеру хочется сделать для gii генератор миграций по готовой модели. Можно было бы брать правила валидации и связи, что давало неплохой набор для бутстрапинга миграции. Сейчас связи отпадают…
Ну или еще применение, от которого я не готов отказаться, так что для части своих моделей я таки вернусь к старому синтаксису переопределив магию — хочу сделать в своем приложении генератор запросов по аналогии с 1с-построителем запросов, т.е. GUI-формочку в которой есть все уместные для этой задачи модельки, их свойства, связи, и тыкая мышкой можно настроить запрос с простейшими join, unit sum условиями и т.п.
От идеи смотреть на внешние ключи схемы базы отказался потому что кое-кто из упомянутых тут ребят очень долго распевал мне о том как удобно в юии2 работать со связыми между моделями из разных СУБД и всё такое… :)
Rathil
07.08.2015 00:25+1Круто! Лично для меня самое ожидаемое из этих фич, это расширение asset-ов.
uaoleg
05.09.2015 00:45-1Так и не проникся asset'ами и ушёл на grunt.
uaoleg
13.09.2015 16:13Вот кто-то минуснул, а я же это не сам придумал: yii2-cookbook.readthedocs.org/structure-asset-processing-with-grunt
affka
Отлично! Очень радует формат миграций и исключения в ассетах, а то костыль писать приходилось.
А почему бы миграции не сделать двухнаправленные? Чтобы можно было в up() писать createTable, а down() автоматически понимал что созданную таблицу нужно удалить. У нас обычно в миграциях что-то создается, добавляется или меняется. В остальных случаях можно кидать исключение, мол не могу автоматически сгенерировать down() метод.
Или может быть есть уже такое? Кто подскажет?
Unclead
Есть issue на эту тему github.com/yiisoft/yii2/issues/7928
wild_honey
Cоздавал подобный issue github.com/yiisoft/yii2/issues/7928 с ссылкой все на тот же phinx.org Но тогда он не получил поддержки. Хотя идею эту я реализовал на одном из проектов и остался ей полностьью доволен. Особенно помогает при старте проекта когда 90% миграции добавляют сущность.
SamDark
Ну, не то чтобы не получил… issue открыт, плюсики есть. Как-нибудь запилим.
wild_honey
Опечатался в первом комментарии, имел в виду вот этот github.com/yiisoft/yii2/issues/593
SamDark
О! Слинковал с новым issue. Если оно всплыло повторно, значит не только вам нужно.