Yii 2.0.16
Команда PHP-фреймворка Yii выпустила версию 2.0.16, содержащую более сотни исправлений и немного улучшений. Исправлены несколько проблем с безопасностью.
Ветка Yii 2.0 достигла заморозки более чем год назад, что означает что в неё принимаются главным образом исправления. Сделано это было чтобы позволить команде Yii сфокусироваться на Yii 3. В самом конце этого поста есть чуть больше информации про Yii 3.
В данный релиз вошли несколько изменений, которые могут повлиять на существующие приложения. Обязательно прочитайте UPGRADE.md.
Огромное спасибо членам сообщества Yii, которые участвующим в разработке. Без вас такой масштабный проект был бы невозможен. Отдельное спасибо переводчикам, поддерживающим документацию в актуальном состоянии.
Ниже приведены наиболее интересные улучшения, которым всё-таки удалось просочиться в релиз. Полный список, как обычно, можно посмотреть в CHANGELOG.
Active Record
Salem Ouerdani, @tunecino добавил behavior для optimistic locking.
Optimistic locking позволяет нескольким пользователям одновременно редактировать запись и избегать потенциальных конфликтов на стороне сервера. В случае, когда пользователь пытается сохранить правки на основе устаревших данных (потому что другой пользователь уже сохранился), кидается StaleObjectException
, а обновление или удаление не делается.
Сам механизм такой блокировки был реализован в первых версиях Yii, но использовать его правильно было не так просто. Теперь просто.
Документацию можно найти в официальном руководстве
и API OptimisticLockBehavior.
Миграции
Консольный генератор миграций теперь по умолчанию использует префиксы таблиц. Если вы хотите изменить это, то можете выставить yii\console\controllers\MigrateController::useTablePrefix
в false
в конфиге консольных команд.
Базы данных
- Драйвер MySQL теперь поддерживает точность до доли секунды для временных типов (требуется MySQL >= 5.6.4).
- Драйвер Oracle теперь поддерживает сброс последовательностей.
Хелперы
yii\helpers\Inflector
научился корректно работать с UTF-8.- Добавлен флаг
yii\mutex\FileMutex::$isWindows
для шар Windows на гостевых машинах Unix. - Объекты
yii\helpers\UnsetArrayValue
,yii\helpers\ReplaceArrayValue
теперь могут быть восстановлены после сериализации при помощиvar_export()
.
GridView
Добавлена опция $filterOnFocusOut
, определяющая должна ли производиться фильтрация при потере фокуса.
jQuery
Теперь можно установить jQuery 3.3.
Mutex
- Частота попыток получения блокировки
yii\mutex\FileMutex::acquireLock()
увеличена в том случае если предоставлен$timeout
. - Добавлена поддержка
$timeout
вyii\mutex\PgsqlMutex::acquire()
.
Исправления безопасности
Были исправлены две проблемы с безопасностью:
- CVE-2018–14578: обход проверки CSRF токена в
\yii\web\Request::getMethod()
- CVE-2018–19454: лишнее логирование конфиденциальной информации в
\yii\log\Target
Шаблоны приложений
- Конфиги Codeception были почищены как в шаблоне basic, так и в advanced.
- В шаблон Advanced добавлен простой конфиг для Docker.
- Шаблон Advanced теперь требует более новую версию Codeception, которая работает только начиная с PHP 7.0. Старые приложения будут работать как прежде.
Немного о Yii 3.0
Следующей версией Yii будет 3.0. Подробный анонс будет позже, а пока кратко:
Обновлённая архитектура: фреймворк разбит на отдельные пакеты.
Это позволит собирать из них то, что вам нужно.
JavaScript-независимый: вместе с реорганизацией исходного кода Yii отвязывается от JavaScript-фреймворка в ядре.
Ключевые пакеты Yii не требуют jQuery.
Совместимость с PSR: Yii 3 будет следовать рекомендациям PHP-FIG. Уже реализованы многие PSR: логирование, кеш, DI и другие.
Yii 3.0 находится в стадии активной разработки. Подробный анонс будет сделан по достижению альфа-версии.