Yii 1.1.3

    Yii framework

    Фреймворк Yii продолжает активнейшим образом развиваться, и вот появилась новая версия 1.1.3. Что это вообще за фреймворк, и с чем его едят — читать здесь, а кто в курсе — ознакомляются со списком нововведений.

    Active Record
    • Появилась возможность с помощью CActiveRecord::setTableAlias() указывать в AR-классах псевдоним таблицы для использования в find-методах.
    • Теперь при создании объекта класса CActiveDataProvider можно первым параметром в конструктор передавать не просто название AR-класса, но объект finder AR. Например, Post::model(), Post::model()->published().
    • Добавлен метод CActiveRecord::setDbCriteria() с помощью которого можно устанавливать критерий запроса для текущей модели.
    • Отныне событие CActiveRecord::beforeFind будет срабатывать во всех случаях, включая связанные модели с отложенной (lazy) и «жадной» (eager) загрузкой.
    • Добавлено свойство CBaseActiveRelation::join, что позволяет указывать дополнительное JOIN-выражение при описании реляционных запросов.

    URLs
    • Добавлены свойства CHttpRequest::port и CHttpRequest::securePort, указывающие порты для незащищенных и защищенных запросов. По-умолчанию, 80 и 443 соответственно.
    • Улучшена работа defaultParams в CUrlManager. Это свойство было добавлено еще в 1.0.8 и используется при описании правил формирования URL. Когда правило срабатывает, то параметры из этого свойства добавляются в $_GET. Теперь также при создании ссылки (например, с помощью CController::createUrl()), если задается параметр, который совпадает с каким-нибудь параметром из defaultParams, то этот параметр не указывается дополнительно в созданной ссылке.
    • При использовании параметризованных имен хостов теперь будут создаваться относительные ссылки (URL), если указанное в правиле имя хоста совпадает с текущим.

    CSecurityManager
    • В CSecurityManager добавлена возможность указывать алгоритм для шифровки/расшифровки и хеширования. За это отвечают новые свойства hashAlgorithm и cryptAlgorithm. Теперь можно использовать не только обычные md5 или sha1, но множество других алгоритмов.

    CSort
    • В свойстве CSort::defaultOrder теперь можно использовать виртуальные атрибуты определенные в CSort::attributes. Делать это нужно с помощью массива, где ключами массива будут имена виртуальных атрибутов, а значениями массива — логические значения (true или false), указывающие должна ли сортировка быть убывающей.
    • Также в CSort::attributes появилась новая опция 'default' (помимо 'asc', 'desc' и 'label'), которая предписывает по возрастанию или по убыванию нужно сортировать, когда пользователь нажал на соответствующую ссылку сортировки впервые. Опция может принимать значения 'asc' или 'desc.
    • И еще в CSort::attributes, рядом с другими виртуальными атрибутами, можно вставить элемент '*', и все атрибуты указанного в CSort::modelClass AR-класса автоматически станут доступны для сортировки.

    CHtml
    • В настройки CHtml::errorSummary() добавлена опция 'firstError', позволяющая выводить только первое сообщение об ошибке для каждого атрибута модели.
    • В CHtml::dropDownList(), listBox(), activeDropDownList() и activeListBox() теперь можно использовать объекты для указания выделенных элементов.
    • А поля формы (в CHtml) для ввода текста и пароля теперь автоматически генерируют атрибут maxlength согласно правилам модели.

    Темы оформления и скины
    • Теперь в конфигурации приложения можно настраивать значения по-умолчанию для виджетов. Подробнее об этом можно прочитать в документации по скинам.
    • Улучшена работа с представлениями для поддержки использования графических тем приложения в модуле. В связи с этим появился новый синтаксис для имен view-файлов:
      • "//layouts/main" указывает на «protected/views/layouts/main.php» (если «protected» — это базовая директория приложения)
      • "/layouts/main" указывает на «protected/modules/abc/views/layouts/main.php» (если «abc» — это текущий рабочий модуль. Если нет, то это тоже самое, что и "//layouts/main")
      • «main» указывает на view-файл, размещенный в директории представлений текущего контроллера или в директории текущего макета (layout).

    JavaScript
    • Добавлено свойство CClientSсript::coreSсriptPosition, которое позволяет настраивать место подключения яваскриптов ядра. Может принимать значения одной из констант CClientScript::POS_*. По-умолчанию — CClientScript::POS_HEAD.
    • В CActiveForm::clientOptions добавлены опции beforeValidate, afterValidate, beforeValidateAttribute and afterValidateAttribute для указания js-функций, который будут вызываться перед и после валидации формы с помощью ajax.
    • Обновлен плагин jQuery, используемый в CStarRating, а также HTMLPurifier.

    Разное
    • Добавлен метод СWebUser::getFlashes(). Он полностью идентичен с CWebUser::getFlash() за исключением того, что возвращает не последнее, а все доступные на текущий момент моментальные сообщения.
    • В CWebUser добавлены новые события: beforeLogin и afterLogin, исполняемые непосредственно перед и после входа пользователя.
    • В функции CFileHelper::getMimeType() и getMimeTypeByExtension() добавлен второй необязательный параметр, позволяющий указывать путь к файлу, который содержит всю необходимую информацию о MIME-типах.
    • В CBaseListView::summaryText добавлено два новых токена {page} и {pages}, которые заменяются соответственно на номер текущей страницы и общее количество страниц.
    • Добавлен перевод на латышский язык. Теперь Yii включает переводы на 20(!) языков.

    Действия при переходе с версии 1.1.2


    • Если вы пользуетесь скинами для виджетов, нужно обязательно указать равным true свойство 'enableSkin' компоненты приложения 'widgetFactory'. Также, если для предыдущей версии вы настроили свойство 'widgets', теперь необходимо переименовать его в 'skinnableWidgets'.
    • CAutoComplete упразднили и теперь нужно использовать CJuiAutoComplete.
    • Теперь нельзя повторно использовать CActiveFinder. Например, если есть код:
      $finder = Post::model()->with('comments');
      $posts1 = $finder->findAll();

      $posts2 = $finder->findAll();
      , то его нужно переписать следующим образом:
      $posts1 = Post::model()->with('comments');

      $posts2 = Post::model()->with('comments');

    Метки:
    Поделиться публикацией
    Похожие публикации
    Комментарии 42
    • 0
      есть интересные вкусности, сэнкс!
      • 0
        Полный changelog здесь.
        Радует тот факт, что мой повседневный инструмент стабильно развивается, спасибо.
        • +1
          Приятно, что Yii развивается.
          CActiveRecord::setDbCriteria() очень важный метод. Без его отсутствия, я сам написал нечто подобное для AR.
          setTableAlias — тоже достаточно приятная штука.
          Также в CSort::attributes появилась новая опция 'default' — прекрасно. Не хватало.
          • 0
            а мне нравится CClientSсript::coreSсriptPosition — теперь можно, так сказать, «клиентско» оптимизировать Yii-проекты.
            Да и вообще много всего интересного добавлено! Спасибо авторам за релиз!
            • 0
              я, к сожалению, недописал и нажал кнопочку «написать» случайно. Действительно — полезная вещь.
            • +2
              Можно вопрос — а CakePHP хуже или просто другой? :) Про Yii мало что знаю, так как не работал с ним.
              • 0
                имея опыт работы и с тем и с другим могу сказать, что Yii удобней.
                Сранивать их хуже/лучше, я считаю, неправильно. Можно сранивать только performance. Остальное — личные предпочтения.
                • +1
                  Более древний, соответсвено много старых подходов за собой тянет. Yii ориентирован на php5 — много ООП — и все вытекающие отсюда достоинства. И еще, то ли в рунете так, но CakePHP кажется заброшенным — можно судить даже по хабру. Yii раз в 2 месяца точно обновляется — довольно активна русская ветка на официальном форуме — да и русский форум более чем живой
                  • +3
                    CakePHP — один из самых медленных фреймворков. Yii гораздо легковеснее, удобнее в работе.
                  • +7
                    Уиииии! )
                    • 0
                      Супер! Поработав некоторое время с этим фреймворком, считаю, что сделал правильный выбор.
                      • НЛО прилетело и опубликовало эту надпись здесь
                        • 0
                          Очень рад обновлению! Еще бы поддержку Yii добавили в какой-то IDE (NetBeans, PhpStorm например) — было б вообще круто;)
                          • +2
                            вот некий FAQ по работе с Yii в Eclipse PDT:
                            www.yiiframework.com/doc/cookbook/13/
                            • 0
                              Какую такую поддержку Yii вам необходимо иметь в NetBeans, например? Yii написан на PHP, поддержка PHP в бинсах есть. По правилу транзитивности в NetBeans есть поддержка Yii :) Я что-то упускаю? :)
                              • 0
                                наверное что-то типа «create yii project» чтобы сразу с файлами фреймворка грузилось
                                • 0
                                  Ну в принципе тогда да — было бы не плохо + имплементация всеx shell команд, включая пользовательские (crud, mycrud, model, mymodel) — это было бы действительно вкусно.
                                • +1
                                  В NetBeans есть уже поддержка Zend framework и Symphony, теперь идет голосование за Yii — netbeans.org/bugzilla/show_bug.cgi?id=181301
                                  Под поддержкой я имею введу, например, чтобы в отображениях было автодополнение методов, которые переданы с контроллера.
                              • +1
                                "//layouts/main" указывает на «protected/layouts/main.php» (если «protected» — это базовая директория приложения)

                                может protected/views/layouts/main.php?
                                • +1
                                  В protected/modules/abc/layouts/main.php похоже также views забыта.
                                  • 0
                                    Да, все исправил.
                                  • 0
                                    Спасибо.
                                  • 0
                                    Теперь нельзя повторно использовать CActiveFinder.

                                    Думаю, стоит пояснить. Нельзя пользоваться т.к. пришлось убить цикличную ссылку, чтобы устранить давнюю проблему с утечкой памяти AR на PHP 5.2.
                                    • +1
                                      По поводу обновления с CAutoComplete на CJuiAutoComplete есть очень хороший гайд от автора обоих Javascript-решений.
                                      • 0
                                        Непонял, почему multiple убрали.
                                        • 0
                                          Multiple убрали т.к. в CJuiAutoComplete используется новая версия автокомплита и там multiple делается не так. По ссылке есть описание, как сделать multiple.
                                      • +1
                                        А мне нравится Yii! С того момента как перешел на него, ни разу не возникало невыполнимых задач. Все очень гибко и понятно! Рад очередному обновлению! Побежал качать!
                                        • 0
                                          С чего лучше начинать, symfony или yii?
                                          • –1
                                            С CodeIgniter.
                                            • –1
                                              С Codeigniter-ом уже знаком, и запустил несколько проектов.
                                              Но надо двигаться дальше

                                              В symfony мне нравится неплохая документация, большое коммюнити и его популярность в США и Европе. Надо думать о перспективе :)
                                              А про Yii все пишут что он быстрый, с документацией чуть хуже

                                              Но пока с тем и тем не разбирался глубже
                                              • 0
                                                Стоит попробовать оба. Symfony — довольно хороший фреймворк.
                                            • 0
                                              Конечно же Yii!
                                            • +1
                                              Большое спасибо! Отличная новость
                                              • 0
                                                Скажите, пожалуйста, как правильно читается Yii?
                                                • 0
                                                  И
                                                  • 0
                                                    Нет, не могу я принять английский язык :(
                                                    • 0
                                                      Тут английский язык ни при чем. Американцы сами некоторые слова говорят просто потому что они так произносятся.
                                                      По правилам транскрипции наверное было бы все-таки «Юи» или «Юй»… или «Ёи» на худой конец.
                                                      Как произносится «Yii» было написано раньше на yiiframework.com/
                                                      • 0
                                                        Сейчас произношение описано здесь: www.yiiframework.com/about/
                                                        • 0
                                                          Раньше там была транскрипция [i:] (ИИИ), сейчас [ji:] (ЙИИ). Похоже, никак не могут определиться как все-таки называется фреймверк :)
                                                • 0
                                                  Давно обратил внимание на этот фреймворк.

                                                  чем-то он мне больше нравится, чем кодигнитер… сложнее, но интереснее…
                                                  • 0
                                                    Посмотрел лог запросов к бд и удивился ->
                                                    зачем он КАЖДЫЙ раз SHOW CREATE TABLE запрашивает?
                                                    • 0
                                                      Что бы посмотреть внешние ключи. Включение кеширования типа memcached и выставление schemaCachingDuration в настройках к базе, поможет закешировать SHOW COLUMNS FROM и SHOW CREATE TABLE, чтобы они не вызывались каждый раз.

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