Вышла новая версия PHP-фреймворка Yii, включающая в себя более 80 улучшений и исправлений. Инструкции по установке и обновлению можно найти по адресу. Стоит отметить, что в релиз вошли четыре небольших изменения, которые могут повлиять на работу существующих приложений. Обязательно прочитайте UPGRADE.md.
Спасибо замечательному сообществу за отличные пулл-реквесты и обсуждения. Без вас этого релиза не было бы! За процессом разработки Yii 2 можно начать следить, поставив звёздочку на GitHub. Подписывайтесь на наш Twitter и Facebook. Обсудить релиз можно в комментариях.
Полный список изменений можно найти в CHANGELOG. Далее мы рассмотрим наиболее интересные.
URL
Новый класс yiiwebUrlNormalizer
позволяет нормализовать запросы на URI с присутствующим или отсутствующим слешем в конце, что довольно важно для поисковой оптимизации. Подробное описание можно найти в разделе «URL normalization» официального руководства.
Миграции
Помимо небольших исправлений миграции получили и довольно значительное улучшение. Теперь можно запускать миграции из нескольких мест одновременно, если использовать для них пространства имён. Чтобы это сделать, необходимо настроить свойство migrationNamespaces
консольного контроллера:
return [
'controllerMap' => [
'migrate' => [
'class' => 'yiiconsolecontrollersMigrateController',
'migrationNamespaces' => [
'appmigrations',
'someextensionmigrations',
],
//'migrationPath' => null, //можно отключить миграции без пространств имён
],
],
];
Обработка ошибок
Ошибки при записи и чтении сессии теперь не скрываются в отладочном режиме, что позволяет легко выявить большинство проблем на этапе разработки.
Request
Появился новый метод yiiwebRequest::getHostName()
, возвращающий имя хоста для текущего запроса.
Не POST запросы, кодированные как multipart/form-data
(например, загрузка файлов) теперь можно распарсить через yiiwebMultipartFormDataParser
. Для того, чтобы этим воспользоваться, вы должны настроить Request::parsers
следующим образом:
return [
'components' => [
'request' => [
'parsers' => [
'multipart/form-data' => 'yiiwebMultipartFormDataParser'
],
],
// ...
],
// ...
];
После этого следует вызвать Request::getBodyParams()
и запрос будет разобран в соответствующие переменные. В том числе в $_FILES
.
Базы данных
Было добавлено новое поведение для ActiveRecord. yiibehaviorsAttributeTypecastBehavior
позволяет автоматически приводить типы значений атрибутов.
Типы задаются через attributeTypes
:
use yiibehaviorsAttributeTypecastBehavior;
class Item extends yiidbActiveRecord
{
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 yiibehaviorsAttributeTypecastBehavior;
class Item extends yiidbActiveRecord
{
public function rules()
{
return [
['amount', 'integer'],
['price', 'number'],
['is_active', 'boolean'],
];
}
public function behaviors()
{
return [
'typecast' => [
'class' => AttributeTypecastBehavior::className(),
// 'attributeTypes' будет задан автоматически на основе `rules()`
],
];
}
// ...
}
Также был добавлен yiimutexOracleMutex
— реализация блокировки возможностями Oracle.
Консоль
В консоли теперь можно вызвать описание команды передав -h
или --help
.
Тестирование
Шаблоны приложений были изменены, чтобы работать с недавними изменениями в Codeception. Подробнее об этом можно прочитать в новом разделе на сайте Codeception: «Yii 2.0 quickstart guide». Если вы используете шаблон проекта advanced, ознакомьтесь с его документацией по тестированию.
Автор: SamDark