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

    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 30
    • +4
      Очень удобно стало $this->string()->notNull()->after('anotherColumn');
      Спасибо за обновление!
      • 0
        Есть надежда, что в yii2-mongodb к июню появится поддержка нового драйвера?
          • 0
            Того, что будет полноценно поддерживать GridFS. А если уж совсем понаглеть, то и связи через вложенные поля.
            • 0

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

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

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

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

            • 0
              Проблема кроется в сторонних библиотеках.
            • 0
              Сокращения к консольным командам — это просто удобно! Спасибо!

              Но можно спросить глупый вопрос: зачем нужна gii генерация из консоли? Помнить параметры, дольше исправлять ошибки, дольше набирать — зачем, когда все есть наглядно в веб-версии? Единственно на ум приходит автоматизированная генерация кода для систем где можно создавать сущности на лету… но какие это?
              • +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 приложения для вашей модельки готов, который вполне работает. При этом не надо было запускать браузер и "программировать мышкой".

                • 0

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


                  php yii fixture "User"
                  • 0
                    Просто ту же миграцию быстрее имхо удобнее писать с автодополнением от ide. А браузер он и так открыт всегда =)
                    Понятно, что тема чисто субъективная и просто каждый привык к своему.
                  • –1
                    Многие закрывают доступ к модулю через веб из соображений безопасности. При этом разработчики всё ещё могут пользовать это через консоль. Как по мне вполне лоигчно.
                    • +2
                      А зачем gii в том месте где есть доступ других людей?! Так, например в том же advanced модуль подключается только в main-local на рабочем компьютере.
                    • +3
                      Для консольного приложения, у которого нет и не будет веб
                      • 0
                        Да, этот вариант я упустил…
                    • 0
                      А как поживает PHP7 + Yii2 + MSSQL?
                      Они же убрали из ядра php-mssql.
                      • 0

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

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

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

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

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

                            При желании Вы так же можете посодействовать, создав issue, pull запрос, поставив звезду или любым другим способом.
                        • 0
                          del
                          • 0
                            А из composer'а невозможно установить ни basic, ни advanced
                          • 0
                            composer-asset-plugin уже версии 1.1.4, а в мануалах и прочих местах вы все еще рекомендуете 1.1.1
                          • +1
                            Вечно опоздаываю с плюсованием :( Спасибо!

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