![Yii framework](http://insvit.com/images/yii-logo.png)
Фреймворк 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');