Вышла версия 2.0.12 PHP фреймворка Yii. Инструкции по установке и обновлению ищите здесь.
Версия 2.0.12 является минорным релизом Yii 2.0. Она включает в себя более сотни улучшений и исправлений.
В релиз вошли несколько изменений, которые могут повлиять на существующие приложения. Эти изменения описаны в UPGRADE.md.
Спасибо сообществу Yii за поддержку проекта!
За разработкой фреймворка можно следить поставив звёздочку на GitHub. Также можно подписаться на Twitter и Facebook.
Данный релиз задержался, потому как команда была занята другими вещами. Например, мы работаем над новым сайтом и YiiConf
— конференции по Yii, которая пройдёт совсем скоро в Москве.
Так как Yii 2.1 уже разрабатывается, убедитесь, что версия в вашем composer.json
прописана как ~2.0.12
, а не >=
или *
. Так, при релизе 2.1, ваш проект точно не сломается.
Ниже мы рассмотрим самые интересные изменения релиза. Полный список можно посмотреть в CHANGELOG.
Тесты
Покрытие тестами очень важно для своевременного обнаружения проблем. К релизу @vladis84, @boboldehampsink, @Kolyunya и другие члены сообщества Yii помогли нам расширить покрытие кода.
@schmunk42 настроил дополнительное тестирование на базе docker и развернул его в GitLab. Некоторые тесты там всё ещё падают. Главным образом, из за отличий в данных для интернационализации. Это будет исправлено немного позже.
Базы данных
Слой работы с базами получил несколько улучшений в работе с выражениями. Теперь их можно использовать в \yii\db\QueryTrait::limit()
, \yii\db\QueryTrait::offset()
и \yii\data\Sort
.
MSSQL
Поддержка MSSQL существенно улучшилась. Значительно возросла скорость чтения схемы и был реализован метод yii\db\mssql\QueryBuilder::resetSequence()
.
Безопасность
yii\base\Security::hkdf()
был улучшен. Теперь, если это возможно, используетсяhash_hkdf()
из PHP >= 7.1.2.- В
yii\captcha\CaptchaAction
теперь используетсяmt_rand()
вместоrand()
.
Юзабилити
Шаблон миграций теперь по умолчанию использует safeUp()
и safeDown()
. В том случае, когда изменения схемы в транзакции не поддерживаются (например, MySQL), изменения применяются без транзакций.
Различные компоненты фреймворка обзавелись значениями по умолчанию:
\yii\data\SqlDataProvider
теперь считает записи самостоятельно в том случае, когдаtotalCount
не указан.- Провайдеры данных автоматически выставляют ID. Больше нет необходимости указывать его для случая, когда несколько провайдеров с постраничной разбивкой используется на одной странице.
- Фильтр для
yii\grid\DataColumn
автоматически генерится как выпадающий список в том случае, еслиformat
выставлен вboolean
.
Команда yii cache
начала предупреждать о том, что она не может очистить кеш APC из консоли.
yii\filters\AccessRule
теперь позволяет передать параметры в функцию проверки роли.
Производительность
- В
yii\web\UrlManager
добавлена поддержка кеширования вызововyii\web\UrlRule::createUrl()
в случае использования правил с умолчаниями. - В DB command Добавлена опция для отключения логирования и профайлинга.
yii\data\ActiveDataProvider
не делает запросы в том случае, когда количество моделей равно нулю.
Всякое
StringHelper
научился работать с URL-безопасным base64 через методы encode()
/decode()
. Это может быть полезно для различных токенов.
yii\helpers\Html::img()
теперь позволяет указать srcset
:
[php]
echo Html::img('/base-url', [
'srcset' => [
'100w' => '/example-100w',
'500w' => '/example-500w',
'1500w' => '/example-1500w',
],
]);
У yii\widgets\LinkPager
можно рендерить кнопку текущей страницы как disabled. Для этого необходимо выставить disableCurrentPageButton
в true.
Контроль доступа и валидаторы стали требовать меньше зависимостей:
yii\filters\AccessControl
теперь может использоваться без компонентаuser
.- Валидаторы больше не требуют
Yii::$app
.
Комментарии (25)
Caravus
06.06.2017 15:08+2Шаблон миграций теперь по умолчанию использует safeUp() и safeDown()
Каждый раз как генерирую миграции вспоминаю про это, и каждый раз думаю о том что надо сделать свой шаблон :)
skoder
06.06.2017 18:54+1Специфичная ошибка: У меня в YII_DEBUG режиме. К rest массиву, прицевляются все SQL запросы и время их выполнения.
$sqls = Yii::getLogger()->getProfiling(['yii\db\Command::query', 'yii\db\Command::execute']);
Этот код вызывает ошибку
md5() expects parameter 1 to be string, array given /yiisoft/yii2/log/Logger.php line 281
symbix
06.06.2017 22:01+3В yii\captcha\CaptchaAction теперь используется mt_rand() вместо rand()
Уж раз менять такие вещи — то почему бы сразу не использовать везде random_int() или random_bytes()? Давно и полифилл есть — paragonie/random_compat.
Хотя для капчи несущественно, конечно.
y0rker
07.06.2017 07:32+1В yii\web\UrlManager добавлена поддержка кеширования вызовов
Спасибо большое, а то раньше приходилось кешировать ручками)
DarthLegiON
07.06.2017 07:32Фильтр для yii\grid\DataColumn автоматически генерится как выпадающий список в том случае, если format выставлен в boolean.
Лучше бы как чекбокс, но селект тоже неплохо.rokoko_dev
07.06.2017 12:31+2Извините, а как вы себе чекбокс там предаставляете?
Как по мне селект самое то.
Спасибо!
booomerang
07.06.2017 10:34-4После обновления на 2.0.12 слетели exist валидации. БУДЬТЕ ОСТОРОЖНЫ!
Долго грешили на свои ошибки, но откатились до 2.0.11 и там все нормально. Смотрели diff. У вас там есть правки связанные с названием таблицы. Писать issue нет сейчас времени, если есть возможность — посмотрите.SilverFire
07.06.2017 17:26+4Черкануть на GitHub способ воспроизведения и упомянуть предполагаемую причину — это до 10 минут времени, которые сэкономят десятки часов других разработчиков, которые могут столкнуться с той же проблемой.
Искренне не понимаю, как можно было обнаружить ошибку, поискать ее причину в своём проекте, посмотреть diff'ы кода фреймвока, найти там предполагаемую причину и потом перечеркнуть все потраченные усилия, не открыв issue.
ilyaplot
08.06.2017 10:51+2Не могу подтвердить. У меня ничего не слетело после обновления. Exist используется.
Gudson
09.06.2017 12:44+1yii\filters\AccessRule теперь позволяет передать параметры в функцию проверки роли.
Это просто прелестно! Всё время чувствовал легкие сомнения и неудобства, используя ActionFilter для проверки прав…
Sartor
Вот за:
отдельное спасибо! В дебаг режиме после 1к запросов они начинали дико тупить.rmrevin
Расскажите, пожалуйста, что за задача требует выполнения 1к запросов в базу?
SamDark
Фоновый импорт-экспорт, например.
rmrevin
А почему нельзя использовать batch insert? Или предполагается тысяча insert'ов по n^1024 строк? Тогда на мой взгляд дебаггер такому фоновому обработчику не нужен. Дебажить его можно прямо в консоли, а если нужно логировнаие, то это задача не дебаггера.
SamDark
Да, 1000 по n^1024. Довольно типично. На тему дебажить или нет — согласен.
rmrevin
Я не говорил, что не нужно дебажить ) Я имел ввиду, что дебаг панель для этого не подходит. Страница со списком запросов будет весить чуть больше, чем весят сами данные. И при 1000 инсертов по n^1024 строк, этой страницей просто будет невозможно воспользоваться.
Sartor
Потому что нет batch update. Мне приходится обновлять огромное кол-во отдельный сущностей. Чтобы избежать блокировок обновляю по одной без транзакций.
Да и не в этом дело. Фоновые задачи (а у меня как раз импорт данных) могу выполнять огромное кол-во простых задач. Я разрабатываю локально и у меня естественно включен дебаг режим. Поэтому нормально протестировать производительность большого кол-ва запросов не получается. Замедление видно уже после 30 секунд работы. И я не использую ни логи, ни профайлинг базы в консоли. Добавленная же возможность позволяет их навсегда отключить. Что я уже и сделал. Ещё раз спасибо разработчикам.