Пользователь
0,0
рейтинг
5 июля 2010 в 09:46

Разработка → Yii 1.1.3

Yii*
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');

Алексей Волков @rosko
карма
28,8
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (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, чтобы они не вызывались каждый раз.

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