Yii — php-фреймворк

индекс
104,84

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

+57
5 июля 2010, 09:46
25

комментарии (42)

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

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

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

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

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

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

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