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),                 ];             }         ],     ], ];  

ссылка на оригинал статьи http://habrahabr.ru/post/264159/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *