Pull to refresh

Yii 2.0.6

Yii *
Состоялся релиз 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!']
}, true);


Улучшения yii message



Теперь поддерживается создание файлов .pot.

Команда теперь отлично переваривает вложенные вызовы:

Yii::t('app', 'There are new {messages} for you!', [
    'messages' => Html::a(Yii::t('app', 'messages'), ['user/notifications']),
]);


Также теперь сортировка происходит даже при отсутствии новых строк, что позволяет получить меньший 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 ($fields) {
                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),
                ];
            }
        ],
    ],
];

Tags:
Hubs:
Total votes 18: ↑16 and ↓2 +14
Views 19K
Comments Comments 42