Вышла новая версия PHP-фреймворка Yii, включающая в себя более 80 улучшений и исправлений. Инструкции по установке и обновлению можно найти по адресу. Стоит отметить, что в релиз вошли четыре небольших изменения, которые могут повлиять на работу существующих приложений. Обязательно прочитайте UPGRADE.md.
Спасибо замечательному сообществу за отличные пулл-реквесты и обсуждения. Без вас этого релиза не было бы! За процессом разработки Yii 2 можно начать следить, поставив звёздочку на GitHub. Подписывайтесь на наш Twitter и Facebook. Обсудить релиз можно в комментариях.
Полный список изменений можно найти в CHANGELOG. Далее мы рассмотрим наиболее интересные.
URL
Новый класс yii\web\UrlNormalizer позволяет нормализовать запросы на URI с присутствующим или отсутствующим слешем в конце, что довольно важно для поисковой оптимизации. Подробное описание можно найти в разделе «URL normalization» официального руководства.
Миграции
Помимо небольших исправлений миграции получили и довольно значительное улучшение. Теперь можно запускать миграции из нескольких мест одновременно, если использовать для них пространства имён. Чтобы это сделать, необходимо настроить свойство migrationNamespaces консольного контроллера:
return [ 'controllerMap' => [ 'migrate' => [ 'class' => 'yii\console\controllers\MigrateController', 'migrationNamespaces' => [ 'app\migrations', 'some\extension\migrations', ], //'migrationPath' => null, //можно отключить миграции без пространств имён ], ], ];
Обработка ошибок
Ошибки при записи и чтении сессии теперь не скрываются в отладочном режиме, что позволяет легко выявить большинство проблем на этапе разработки.
Request
Появился новый метод yii\web\Request::getHostName(), возвращающий имя хоста для текущего запроса.
Не POST запросы, кодированные как multipart/form-data (например, загрузка файлов) теперь можно распарсить через yii\web\MultipartFormDataParser. Для того, чтобы этим воспользоваться, вы должны настроить Request::parsers следующим образом:
return [ 'components' => [ 'request' => [ 'parsers' => [ 'multipart/form-data' => 'yii\web\MultipartFormDataParser' ], ], // ... ], // ... ];
После этого следует вызвать Request::getBodyParams() и запрос будет разобран в соответствующие переменные. В том числе в $_FILES.
Базы данных
Было добавлено новое поведение для ActiveRecord. yii\behaviors\AttributeTypecastBehavior позволяет автоматически приводить типы значений атрибутов.
Типы задаются через attributeTypes:
use yii\behaviors\AttributeTypecastBehavior; class Item extends \yii\db\ActiveRecord { public function behaviors() { return [ 'typecast' => [ 'class' => AttributeTypecastBehavior::className(), 'attributeTypes' => [ 'amount' => AttributeTypecastBehavior::TYPE_INTEGER, 'price' => AttributeTypecastBehavior::TYPE_FLOAT, 'is_active' => AttributeTypecastBehavior::TYPE_BOOLEAN, ], 'typecastAfterValidate' => true, 'typecastBeforeSave' => false, 'typecastAfterFind' => false, ], ]; } // ... }
Если attributeTypes не задан, значение будет определяться автоматически на основе правил валидации:
use yii\behaviors\AttributeTypecastBehavior; class Item extends \yii\db\ActiveRecord { public function rules() { return [ ['amount', 'integer'], ['price', 'number'], ['is_active', 'boolean'], ]; } public function behaviors() { return [ 'typecast' => [ 'class' => AttributeTypecastBehavior::className(), 'owner' => $this, // 'attributeTypes' будет задан автоматически на основе `rules()` ], ]; } // ... }
Также был добавлен yii\mutex\OracleMutex — реализация блокировки возможностями Oracle.
Консоль
В консоли теперь можно вызвать описание команды передав -h или --help.
Тестирование
Шаблоны приложений были изменены, чтобы работать с недавними изменениями в Codeception. Подробнее об этом можно прочитать в новом разделе на сайте Codeception: «Yii 2.0 quickstart guide». Если вы используете шаблон проекта advanced, ознакомьтесь с его документацией по тестированию.