Состоялся релиз 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.8 сломя голову не обязательно.


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


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


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


./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, позволяющая быстро поднять рабочее окружение.
Подробнее о ней можно узнать из документации.

Комментарии (29)


  1. gogolinsky
    28.04.2016 23:20
    +4

    Очень удобно стало $this->string()->notNull()->after('anotherColumn');
    Спасибо за обновление!


  1. Lisio
    29.04.2016 01:22

    Есть надежда, что в yii2-mongodb к июню появится поддержка нового драйвера?


    1. SamDark
      29.04.2016 01:26
      +1

      1. Lisio
        29.04.2016 01:34

        Того, что будет полноценно поддерживать GridFS. А если уж совсем понаглеть, то и связи через вложенные поля.


        1. SamDark
          29.04.2016 01:53

          Обещать к июню не могу. Я практически не занимаюсь монгой. Можно попробовать задать этот вопрос cebe.


  1. bethrezen
    29.04.2016 01:40
    +10

    Заметка для тех, кто боится использовать Yii2 и php7 — не бойтесь.
    Мы используем со времён php 7.0.0 — полёт успешный, а этот релиз yii2 только придал уверенности в правильности перехода на семёрку. На боевых и посещаемых сайтах не встречали даже segfault, хотя коллеги замечали пару раз на dev-серверах.
    Прирост в производительности php7 ощутим и на yii2 в том числе — TTFB в среднем на 30% меньше, потребление памяти на ~40% меньше. Статистика по e-commerce проектам(php7 vs php56), примерная. Если нужна конкретика — соберём, покажем.

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


    1. SamDark
      29.04.2016 01:55
      +3

      Когда в описании всё чётко и по делу и есть тесты, на проверку уходит не очень много времени. Поэтому быстро и без бюрократии...


    1. vashkatsi
      29.04.2016 11:51

      Проблема кроется в сторонних библиотеках.


  1. yujin1st
    29.04.2016 08:29

    Сокращения к консольным командам — это просто удобно! Спасибо!

    Но можно спросить глупый вопрос: зачем нужна gii генерация из консоли? Помнить параметры, дольше исправлять ошибки, дольше набирать — зачем, когда все есть наглядно в веб-версии? Единственно на ум приходит автоматизированная генерация кода для систем где можно создавать сущности на лету… но какие это?


    1. habrjeka
      29.04.2016 09:10
      +2

      Мне вот очень зашло:


      php yii migrate/create create_user --fields="username:string(255):notNull(),email:string():notNull()"
      // проверяем, поправляем код миграции в файле
      php yii migrate 
      php yii gii/model --modelClass="User" --tableName="user" --ns="backend\models"
      // поправляем, проверяем код модели в файле
      php yii gii/crud --controllerClass="backend\controllers\UserController" --modelClass="backend\models\User"
      // Теперь осталось код чуточку подправить и показать PM ;) 

      Скелет CRUD приложения для вашей модельки готов, который вполне работает. При этом не надо было запускать браузер и "программировать мышкой".


      1. habrjeka
        29.04.2016 09:18

        Ну и демо данные набросать ещё можно, по аналогии с этим PR:


        php yii fixture "User"


      1. yujin1st
        29.04.2016 10:35

        Просто ту же миграцию быстрее имхо удобнее писать с автодополнением от ide. А браузер он и так открыт всегда =)
        Понятно, что тема чисто субъективная и просто каждый привык к своему.


    1. moicirk
      29.04.2016 11:51
      -1

      Многие закрывают доступ к модулю через веб из соображений безопасности. При этом разработчики всё ещё могут пользовать это через консоль. Как по мне вполне лоигчно.


      1. yujin1st
        29.04.2016 15:09
        +2

        А зачем gii в том месте где есть доступ других людей?! Так, например в том же advanced модуль подключается только в main-local на рабочем компьютере.


    1. Urichalex
      29.04.2016 11:51
      +3

      Для консольного приложения, у которого нет и не будет веб


      1. yujin1st
        29.04.2016 15:10

        Да, этот вариант я упустил…


  1. wispoz
    29.04.2016 11:51

    А как поживает PHP7 + Yii2 + MSSQL?
    Они же убрали из ядра php-mssql.


    1. SamDark
      29.04.2016 11:52

      Вроде недавно сделали билд расширения для MSSQL под семёрку и вроде как работает.


  1. artem90
    30.04.2016 08:54

    Осмелюсь поделиться своей поделкой, может кому-нибудь да пригодится:

    Генератор файла миграции на основе аннотаций модели.

    https://github.com/Doka-NT/yii2-migration-generator

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


    1. wispoz
      03.05.2016 23:27
      +1

      Тесты будут?


      1. artem90
        04.05.2016 07:31

        Да, конечно, тесты будут.

        При желании Вы так же можете посодействовать, создав issue, pull запрос, поставив звезду или любым другим способом.


  1. artem90
    30.04.2016 09:17

    del


  1. pzotov
    02.05.2016 18:52

    А из composer'а невозможно установить ни basic, ни advanced


    1. SamDark
      02.05.2016 20:46

      Почему?


      1. pzotov
        02.05.2016 20:57

        http://joxi.ru/LmG51lpSRjY56A


        1. SamDark
          02.05.2016 21:43

          А, ну это потому как надо делать как в гайде написано:


          composer global require "fxp/composer-asset-plugin:~1.1.1"
          composer create-project --prefer-dist yiisoft/yii2-app-basic basic


          1. pzotov
            02.05.2016 22:14

            ясно, спасибо


  1. Urichalex
    06.05.2016 23:33

    composer-asset-plugin уже версии 1.1.4, а в мануалах и прочих местах вы все еще рекомендуете 1.1.1


    1. SamDark
      07.05.2016 21:11

      Не 1.1.1, а ~1.1.1.