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!']
    }, 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),
                    ];
                }
            ],
        ],
    ];
    
    
    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 42
    • +3
      Отлично! Очень радует формат миграций и исключения в ассетах, а то костыль писать приходилось.

      А почему бы миграции не сделать двухнаправленные? Чтобы можно было в up() писать createTable, а down() автоматически понимал что созданную таблицу нужно удалить. У нас обычно в миграциях что-то создается, добавляется или меняется. В остальных случаях можно кидать исключение, мол не могу автоматически сгенерировать down() метод.
      Или может быть есть уже такое? Кто подскажет?
      • +1
        Есть issue на эту тему github.com/yiisoft/yii2/issues/7928
        • 0
          Cоздавал подобный issue github.com/yiisoft/yii2/issues/7928 с ссылкой все на тот же phinx.org Но тогда он не получил поддержки. Хотя идею эту я реализовал на одном из проектов и остался ей полностьью доволен. Особенно помогает при старте проекта когда 90% миграции добавляют сущность.
          • 0
            Ну, не то чтобы не получил… issue открыт, плюсики есть. Как-нибудь запилим.
            • 0
              Опечатался в первом комментарии, имел в виду вот этот github.com/yiisoft/yii2/issues/593
              • 0
                О! Слинковал с новым issue. Если оно всплыло повторно, значит не только вам нужно.
      • 0
        Формат миграций стал прям супер-супер, вот только возможность добавить комментарий (как-то так бы ->comment('комментарий')) не реализовали, интересно почему?
      • +1
        Парни из core team (@samdark и @cebe) скромно скрыли свой вклад в новые миграции)
        • +1
          SamDark, а как релизятся зависимые проекты?
          • 0
            Независимо. Сейчас чуть передохнём и тоже релизнем по одному.
          • +1
            Я конечно рад, кто есть такой фрэймворк, но я считаю что он УБОГИЙ. За столько лет так и не смогли добавить нормальные виджеты для работы с временем, датой, датой и временем.
            • 0
              Сможете более развёрнуто расписать? Что для вас «нормальные виджеты для работы с временем, датой, датой и временем» и чем не устраивают те, что уже есть?
              • –1
                Легко, скачайте последнюю базовую версию Yii2+ установите и попробуйте через слой вывести input-виджеты время, дата, время и дата. Там только есть дата виджет и все станет ясно.
                • +1
                  через слой? Что есть слой?

                  В симфони вообще нет виджетов, а убогим его трудно назвать.
                  Да и виджеты времени — это обертки над сторонними виджетами, пишущимися за 10 минут. Так что такой аргумент в пользу убогости явно необъективен.
                  • +1
                    github.com/2amigos/yii2-date-time-picker-widget вам в помощь. Причём только тут фреймворк?
                    • –1
                      А зачем мне фрэймворк в котором надо искать, перебирать и мострячить компонент который ОБЯЗАН быть в стандартной комплектации.
                      Вот пример:
                      — Не давно попросили сервис создать на Yii так я сервис писал 3 часа, а компоненты времени искал, перебирал и тестил 13 часов.
                      Зачем такой фреймворк. Одна из задач при создании фреймворка — это экономия времени, если Yii не экономит время вывод один — он убог. Зачем писать фреймворк где виджеты урезаны и нужно использовать сторонние? Ну сделали бы тогда без виджетов вообще или сделайте все базовые — почему надо не туда не сюда, как дороги в России, вроде есть, а вроде нет.
                      • +1
                        Это вы еще Ларавел не юзали…
                        Нужен RBAC — выбирай из восьми кастомных.
                        Шаблонизатор? Есть два встроенных, но большинство юзают твиг…
                        Хочешь собственный класс правил для урлменеджера? Придется писать не только рулсы но и сам урлменеджер. Ну и что, что ядро не умеет кастомные вещи, зато его просто переопределять. В юии есть из коробки? Так это потому что он кривой…
                        И так во всём. Во всём-всём… Как линунс времен 90-х.

                        У меня у самого много претензий к Юии, много чего не хватает, но цепляться к неполному набору виджетов в ядре? гм…
                        • 0
                          начнем с того, что в стандартной комплектации наоборот не должно быть и тех виджетов, которые там есть сейчас. Это реверанс в сторону начинающих программистов, собственно из-за которых фреймворк так и популярен (также как и Ларавел).
                          Фреймворк должен решать более низкоуровневые потребности, чем удобный ввод даты в UI. А из вашего высказывания понятно, что вы путаете фреймворк с cms. На фреймворке программируют, а не собирают проект из плагинов.
                          • 0
                            Я полностью с Вами согласен. Но если бы не было этих виджетов я вообще никогда бы в Yii не полез.
                            «Фреймворк должен решать более низкоуровневые потребности, чем удобный ввод даты в UI» — спорный вопрос.
                            • 0
                              никапли не спорный. ru.wikipedia.org/wiki/%D0%A4%D1%80%D0%B5%D0%B9%D0%BC%D0%B2%D0%BE%D1%80%D0%BA
                              • 0
                                Ничего по данной ссылки подтверждающие Ваши слова не увидел, как и опровергающие мои.
                                «Текущая версия страницы пока не проверялась опытными участниками „
                                • 0
                                  тогда продолжать не вижу смысла.
                              • +2
                                Мне кажется, вы таки зря полезли в Yii и не понимаете что есть Framework. PHP-фреймворк вообще может не содержать(я бы даже скорее сказал не должен содержать) UI-элементов.
                              • +1
                                Вообще, лучше, чтобы фреймворком предлагались не только инструменты, но и какой-то вариант реализации (дополнительными приложениями, а не в ядре — идеально), и набором best practices.
                                Иначе слишком много приходится строгать.
                                Это проходил на собственном опыте при разработе на ZF1. Все можно сделать, но все нужно делать. В результате каждый делал по своему и ни о какой «питательной среде» не было и речи — результат — неплохой фреймворк фактически похоронен.
                                Фреймворк нужен для разработки проектов, а не разработки инструментов.
                                Поэтому и RoR настолько популярен. Этим и нравится Yii2.
                              • 0
                                Так есть же yii\jui\DatePicker. Чем не оно?
                                • 0
                                  работает только с датой, а с временем нет и дата-время тоже нет — это огорчает. Мне иногда надо сбацать быстро прототипный проект с базовым дизайном и когда касается работы со временем — начинается проблема.
                                  • +1
                                    JQueryUI, с учетом его распространенности, можно считать промышленным стандартом, и для него сделали расширение yii2-jui c полным набором виджетов. Но там никогда не было контрола для совмещенного ввода даты и времени. За то на стороне появился целый зоопарк таких плагинов. Странно ожидать официальной поддержки на все это многообразие.
                                    Выберите любой, который лучше всего подходит для ваших проектов, и сделайте свою обертку. Это не сложно, и много времени не займет.
                                    Или попробуйте github.com/zhuravljov/yii2-datetime-widgets. Делал для своего проекта когда в интерфейсе понадобился ввод даты-времени и временных интервалов.
                                    • –3
                                      Но сделать один среднечковый-стандартный виджет времени и включить его в базовую комплектацию — это не сильная проблема. А вот потратить день на перебор зоопарка и найти рабочий пример — это потеря времени.

                                      Если бы я всегда работал с Yii то у меня был бы отсеян этот зоопарк компонент и я знал какие лучше, а какие нет. Но я с Yii работаю редко, раз в пол года и каждые пол года приходиться тратить время на поиск примитивного рабочего компонента.

                                      Я понимаю в чем проблема Yii и могу решить ее сам, данный разговор я затеял не ради себя, в последнее время я использую свой фрэймворк на MVC модели Javascript+php / node Просто новички которые сталкиваются с Yii упарываются в эту же проблему со временем/датой. Мое мнение, или не включать тогда компоненты в фрэймворк или делать все базовые с возможностью установки внешних, а в данном случае разработчики остановились на середине.
                                      Yii мне нравиться как сделан, удобно и понятно, с ним приятно работать. Я его не использую в коммерческих проектах, но делаю на нем демки-прототипы.

                                      PS: Я нашел компонент который хотел, не надо мне давать ссылки.
                        • +1
                          Вот уж убогим Yii2 никак назвать нельзя. И очень радует направление развития. Разработчикам огромное спасибо.
                          Так вот находятся люди, которые еще и ругают бесплатный, открытый продукт.
                          Если вам чего-то во фреймворке не хватает — ну сделайте хоть что-то сами и отправьте пулл реквест — будете и сами пользоваться, и все вам скажут спасибо.

                          После перехода с ZF1 (для которого писали сами и миграции, и кучу логики, и кучу компонент) в Yii2 пока не удается сделать ничего нового (даже обидно) — все уже есть или в коробке или в расширениях и работает на удивление хорошо.
                          • 0
                            «Если вам чего-то во фреймворке не хватает — ну сделайте хоть что-то сами и отправьте пулл реквест» — я нашел вариант получше — написал свой фрэймворк. Я указал на незначительную проблему Yii, об которую КАЖДЫЙ «ломает зубы».

                            Если продукт бесплатный — что у него не может быть проблем о которых стоит тут написать?
                            • +1
                              Ну, далеко не каждый. Далеко не всем нужны виджеты для времени и не для всех проблема выбрать из 5—6 вариантов. Но вообще про проблемы писать однозначно надо. И за это вам спасибо.
                              • +1
                                Выбирать из 5-6 вариантов СИСТЕМНЫХ вещей это сакс. Выбирать из 5-6 вариантов простенького виджета который всегда можно переписать самому в случае проблем — элементарно.
                                С другой стороны при росте проекта оказывается что ты таких расширений поставил штук 18, они частично дублируют друг-друга, у каждого свой стиль, разные решения каких-то моментов, и разные отступления от бестпрактикс…
                                И тут уже стоишь перед выбором о том, чтобы рефакторить всё, чтобы упорядочить зоопарк, или поддерживать зоопарк…
                                В идеале конечно было бы иметь некую сертификацию расширений, чтобы были расширения с пометкой «рекомендуемое официально», но это уже фантастика :)
                                • +2
                                  Это не фантастика, а планы ;)
                                  • 0
                                    Это было бы очень приятно.
                                    оффтоп: скажите, я правильно понимаю, что в двойке нет возможности как в первом получить информацию о связях модели по типу public function relations()?
                                    К примеру у меня в 1.1 было расширение которое по наличию связи с User (при условии что таковая связь одна) создавала *Own действия в RBAC для CRUD.
                                    Ну или к примеру хочется сделать для gii генератор миграций по готовой модели. Можно было бы брать правила валидации и связи, что давало неплохой набор для бутстрапинга миграции. Сейчас связи отпадают…
                                    Ну или еще применение, от которого я не готов отказаться, так что для части своих моделей я таки вернусь к старому синтаксису переопределив магию — хочу сделать в своем приложении генератор запросов по аналогии с 1с-построителем запросов, т.е. GUI-формочку в которой есть все уместные для этой задачи модельки, их свойства, связи, и тыкая мышкой можно настроить запрос с простейшими join, unit sum условиями и т.п.
                                    От идеи смотреть на внешние ключи схемы базы отказался потому что кое-кто из упомянутых тут ребят очень долго распевал мне о том как удобно в юии2 работать со связыми между моделями из разных СУБД и всё такое… :)
                                    • 0
                                      В общем-то, да. Просто так получить информацию о связях теперь не выйдет.
                        • +1
                          Круто! Лично для меня самое ожидаемое из этих фич, это расширение asset-ов.

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