Yii 2.0.8

Состоялся релиз PHP-фреймворка версии 2.0.8 Yii. Инструкции по обновлению и установки, можно найти на странице
http://www.yiiframework.com/download/.

Версия 2.0.8 содержит около 100 небольших исправлений и улучшений, насчитывает 300 коммитов, от 64 авторов и затрагивает 150 файлов.

Для обновления могут потребоваться дополнительные действия, так что стоит обратиться к UPGRADE.md.

Спасибо нашему замечательному сообществу за отличные идеи и pull request-ы. Этот релиз состоялся благодаря вам!

За процессом разработки фреймворка можно следить на GitHub. Также подписывайтесь на наш Twitter и вступайте в группу в Facebook.

Ниже мы рассмотрим самые интересные изменения этого релиза. Полный список изменений можно найти в CHANGELOG.


Совместимость с PHP 7

Yii 2.0.8 получил пару исправлений на эту тему. Одно касается обработки ошибок в общем, второе — обработке ошибок JSON.

Как вы, скорее всего, уже знаете, PHP 7 в этом году станет довольно распространённым потому как в свежей Ubuntu LTS доступна пакетом именно эта версия.


Базы данных и ActiveRecord

Метод для фильтрации провайдера для GridView из Yii 1.1 появился в Yii 2.0 в виде yii\db\Query::andFilterCompare().

Документация не поспела. Будем рады помощи в её написании.

В ActiveRecord теперь вызывают EVENT_AFTER_REFRESH после того, как модель обновляет свои данные из базы.


Схема и миграции

Благодаря сообществу, в этот релиз вошли улучшения билдера схемы базы данных, который обычно используют в миграциях.

Во-первых, теперь есть возможность добавлять комментарии таблицам и столбцам. При определении столбца делается это вот так:

'title' => $this->string()->notNull()->comment('Hello, I am the title!'),

Отдельными методами пользоваться можно вот так:

$this->addCommentOnTable('user', 'This is a table comment.');
$this->addCommentOnColumn('user', 'name', 'This is a column comment.');
$this->dropCommentFromColumn('user', 'name');
$this->dropCommentFromTable('user');

Стало возможно задать порядок создаваемого столбца:

$this->string()->notNull()->first();
$this->string()->notNull()->after('anotherColumn');

Теперь объявлять unsigned первичные ключи намного приятнее: $this->primaryKey()->unsigned().

Консольная команда ./yii migrate/create также была немного улучшена. Во-первых, появилась опция useTablePrefix. Если её задать в true, будут генерироваться код с префиксами таблиц.

Во-вторых, можно генерировать внешние ключи через --fields:

yii migrate/create create_post --fields="author_id:integer:notNull:foreignKey(user),category_id:integer:defaultValue(1):foreignKey,title:string,body:text"


Формы и валидация

Вы когда-нибудь забывали задать форме нужный enctype для загрузки файлов? Больше не забудете. Yii добавит его автоматически если в Active Form будет использован fileInput.

В правилах валидации теперь можно сделать поле валидируемым, но, в то же время, недоступным для массового присваивания добавив к началу его имени восклицательный знак.

При использовании FileValidator можно задать mimeTypes используя wildcard-паттерн. Например, image/* будет означать все типы, начинающиеся с image/ (image/jpeg, image/png и т.д.).

DateValidator научился валидировать ещё больше форматов времени. Теперь можно выставить $type property в TYPE_DATETIME или TYPE_TIME для валидации коротких форматов intl.


Безопасность

Благодаря исследованию Tom Worster и продуктивным обсуждениям, которые за ним последовали, компонент Security удалось улучшить:


  • Теперь он не читает больше данных, чем реально необходимо, из /dev/urandom и /dev/random.
  • На FreeBSD предпочтение отдаётся /dev/random, а не /dev/urandom.
  • Повышена производительность генерации случайных чисел.

Изменения не критичные, так что обновляться на 2.0.7 сломя голову не обязательно.

Тесты для компонента также были переработаны, так что покрытие на разных системах при разных доступных расширениях теперь намного лучше.


Консольные команды

В дополнение к существующим опциям теперь для большинства опций можно использовать короткие алиасы-флаги. К примеру, при создании миграций можно использовать

./yii migrate/create -p=@app/modules/somemodule/migrations -t=module_migrations new_migration

вместо

./yii migrate/create --migrationPath=@app/modules/somemodule/migrations --migrationTable=module_migrations new_migration

В своих собственных контроллеров реализовать это можно перекрыв метод yii\console\Controller::optionAliases().


Внедрение зависимостей в анонимные функции в конфигах

Зависимости теперь автоматически внедряются в замыкания, используемые в конфигурации:

 'components' => [
    'pheanstalk' => function(yii\web\User $user) {
        $result = new \Pheanstalk\Pheanstalk('localhost');
        $result->watch($user->getId());
        return $result;
    },
    // ...


PostgreSQL mutex

Появилась реализация Mutex под PostgreSQL. Если вы пользуетесь данной СУБД, у вас появился ещё один вариант реализации блокировки.


Шаблон проекта advanced

В шаблоне проекта advanced появилась конфигурация для vagrant, позволяющая быстро поднять рабочее окружение.
Подробнее о ней можно узнать из документации.

© Habrahabr.ru