Yii 2.0.6
Состоялся релиз PHP фреймворка Yii версии 2.0.6.
Инструкции по установке и обновлению доступны по адресу 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!']
}, 'There are errors!');
Улучшения yii message
Теперь поддерживается создание файлов .pot
.
Команда теперь отлично переваривает вложенные вызовы:
Yii::t('app', 'There are new {messages} for you!', [
'messages' => Html::a(Yii::t('app', 'messages'), ['user/notificaitons']),
]);
Также теперь сортировка происходит даже при отсутствии новых строк, что позволяет получить меньший 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 ($session) {
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),
];
}
],
],
];