Как стать автором
Обновить

Yii 1.1.3

Время на прочтение 4 мин
Количество просмотров 5.1K
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');

Теги:
Хабы:
+57
Комментарии 42
Комментарии Комментарии 42

Публикации

Истории

Работа

PHP программист
171 вакансия

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн