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

индекс
104,84

Yii 1.1.2

Очевидно, что в этом году график выхода версий фреймворка намного поспокойнее. Зато теперь каждый релиз приносит гораздо больше исправлений ошибок и добавлений новых возможностей.

В новой, только что вышедшей, версии 1.1.2 мы имеем порядка 20 багфиксов и 30 улучшений или нововведений.


Рассмотрим самые примечательные:

  • Добавлена возможность «на лету» управлять отношениями в моделях ActiveRecord.
    Для этого добавлено три метода: Все три метода являются по сути оберткой для управления открытым (public) свойством CActiveRecordMetaData::relations, которое хранит в себе все отношения. Доступ к этим методам и свойству из экземпляра AR-класса производится с помощью метода CActiveRecord::getMetaData().

  • Добавлен метод CActiveRecord::resetScope() позволяющий сбрасывать все использованные в цепочке именованные группы условий (scopes) включая группу условий по умолчанию.

  • Добавлен метод CModel::getValidatorList() для гибкого управления валидаторами модели «на лету».

  • В метод CBaseController::widget() добавлен третий параметр, который позволяет не выводить результаты работы виджета сразу на экран, а возвращать, например, для сохранения в переменную. Подобным образом, как это делает CController::render() и другие рендер-методы.

  • CCaptchaAction теперь поддерживает неограниченное количество попыток ввода установкой свойства testLimit равным нулю.

  • В CAssetManager::publish() добавлен четвертый параметр, который включает принудительное копирование ресурсных файлов и директорий из исходного места в публикуемую директорию даже если они были опубликованы до этого. Этот параметр стоит использовать преимущественно только во время разработки, когда исходные файлы ресурсов постоянно правятся.

  • Создан еще один класс для кеширования. Теперь можно использовать WinCache с помощью класса CWinCache. Естественно, для этого в PHP должно быть включено соответствующее расширение.

  • Появилась возможность совмещать обычные шаблоны PHP-native и специальные шаблоны настраиваемые через дополнительные классы (например, CPradoViewRenderer)

  • CTypeValidator теперь поддерживает проверку не только одиночных переменных, но и содержимого массивов.

  • Добавлен метод CFileHelper::getExtension для определения расширения файла.

  • Улучшения в CDbCriteria:
    • Исправлена ошибка, которая раньше делала невозможным объединение двух условий с параметрами.

    • Также в CDbCriteria::select названия полей теперь можно обрамлять кавычками при сложных запросах.

    • Добавлен метод CDbCriteria::addBetweenCondition(), который позволяет удобно добавлять в sql-запрос конструкции вида «column BETWEEN a AND b».
  • Добавлен украинский перевод сообщений.

  • Создана функция CHttpSession::get(), которая возвращает значение переменной сессии по ее имени. Эта функция очень похожа на CHttpSession::itemAt(), за исключением того, что может возвращать значение по-умолчанию, если переменная сессии с заданным именем не определена.


Модуль Gii



Отдельно необходимо отметить новый модуль под названием Gii, который включен в дистрибутив.

То, что раньше делалось с помощью утилиты yiic, теперь с легкостью можно сделать прямо в браузере. Этот модуль предоставляет возможность для генерации кода не из командной строки, а в браузере, что конечно же гораздо удобнее.

В Gii исходно включено несколько генераторов (и их количество можно расширять), каждый из которых отвечает за генерацию кода своего типа. Например, генератор контроллера производит код класса контроллера вместе с несколькими view-файлами, а генератор модели создает ActiveRecord-класс для определенной таблицы в БД.

Типичные действия при использовании генератора:
  1. Войти на страницу генератора.
  2. Заполнить форму с параметрами для генерации. Например, при использовании генератора модулей, чтобы создать новый модуль, нужно ввести название (идентификатор) модуля.
  3. Нажать кнопку «Предварительный просмотр», чтобы увидеть какие файлы будут созданы и, кликнув по любому из них, просмотреть их содержимое.
  4. Нажать кнопку «Генерировать» для непосредственного создания файлов.
  5. По желанию просмотреть лог-файл с описанием всех действий произведенных при генерации нового кода.
Так как модуль создает новые файлы с php-кодом, то его стоит использовать только на сервере разработчика.

Более подробную информацию, а также инструкции по подключению модуля читайте в документации.
+39
2 мая 2010, 21:41
14

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

+3
Egor4ik #
Отличная новость! Спасибо! Особенно радует новый модуль Gii.
+3
SamDark #
Спасибо! Отличный обзор нововведений.
0
icegreenberry #
Эххх, влюбился в Yii еще пол года назад — сейчас на нем пишу диплом :)
+5
Shvonder #
Gii поможет вам сгенерировать его
0
DEViANCE #
Спасибо, обновимся. ;)
НЛО прилетело и опубликовало эту надпись здесь
+2
SamDark #
Для упрощения.
НЛО прилетело и опубликовало эту надпись здесь
+8
iNevil #
<sarcasm>И не говорите… Мало того, что понапридумывали всяких интерпретируемых языков, так еще и фреймворки к ним пишут...</sarcasm>
НЛО прилетело и опубликовало эту надпись здесь
0
LevshinO #
Даешь ASM в web-среде!
+1
Nc_Soft #
мне нравится этот фреймворк, с Gii еще проще будет
–1
megahertz #
Исправлена ошибка, которая раньше делала невозможным объединение двух условий с параметрами.
Отлично, а то раньше приходилось обходиться голым SQL-ем
–4
Goodkat #
Написали бы, для чего он нужен, этот фрэймворк, а то какой-то список функций опубликовали.
+1
romanoza #
А вас не смущает, что топик в блоге Yii framework?
+1
Goodkat #
Топик на главной и в RSS-ридере.
+3
romanoza #
автор должен извиниться за +?
–2
Goodkat #
Если вы публикуете статью о какой-то малоизвестной вещи, то не помешает в начале написать пару предложений о том, что это такое и для чего оно нужно.
Если же вы пишете только для своих или тех, кто в теме, то вешайте замок.
Что тут непонятного?

Я сперва подумал, что топик о PHP-фрэймворке для YUI.
Открыл — и не нашёл никакой инфо о том, что это за хрень, только перечисление функций.
+5
rosko #
Ок, приму к сведению. Но все же:
— топик опубликован в узкотематическом блоге, а не в общем, например о пхп
— такой обзор выход каждый месяц, каждый раз вставлять пару общих строк о фреймворке?
–2
Goodkat #
Хоть блог и узкотематический, но на главную топик попал. Думаю, многие недоуменно пожали плечами и проскроллили мимо.
Каждый раз и не надо, можно сделать один обзор фрэймворка, а потом давать на него ссылку: «Обновился замечательный фрэймворк Yii, что это такое и с чем его едят, читать здесь (ссылка), а кто в курсе, читают список нововведений под катом».

Быть может, этот фрэймворк — позарез необходимая мне вещь, о которой я всю жизнь лишь мечтал, но не знал о существовании :)

Простите за занудство.
0
bo883 #
Как это мало известная вещь? фреймворк достаточно популярен и быстро набирает обороты.
И если вы не знаете для чего он, то он вам точно не нужен.

ЗЫ: Огромное спасибо за обзор, и за новую версию.
+6
proxor #
Для фремворка «Ыыы» добавили модуль «Гыы» :) No offence, фреймворк классный.
0
romanoza #
Есть еще Зыы
+1
Nc_Soft #
хотя, имхо, вот это уже лишнее
«Добавлен метод CFileHelper::getExtension для определения расширения файла.»
pahtinfo() же есть
+2
romanoza #
Большое количество вспомогательных методы фреймворка повторяют стандартные функции пхп с небольшими добавлениями.
НЛО прилетело и опубликовало эту надпись здесь
0
afunix #
Отлично! Осталось теперь дождаться только db-миграций.
А то сейчас есть только отвратительное, малофункциональное и плохо спроектированное расширение…
0
SamDark #
Есть хорошие реализации или список требований ознакомиться?
0
afunix #
Ну, например, в рельсах есть миграции. Думаю там лучше реализовано. guides.rubyonrails.org/migrations.html
А вообще, если Вы почитаете код расширения, Вы увидите, что:
1. Нельзя создать первичный ключ кроме как «id int». Например, в yii есть sql-схема для AuthManager, которая не использует в качестве ключей id. Нельзя сделать первичный ключ из нескольких полей.
2. Foreign key вообще не создать. ON DELETE/UPDATE/… не сделать.
3. Никакой кросс-sql-ности. До есть да, расширение умеет создать простую таблицу, простое поле, но как только нужно для mysql, скажем, указать кодировку или engine, то сразу теряется переносимость, ибо нельзя никак определить для каждой DBM свои опции. То же самое с полями таблицы. Автор предлагает писать опции поля вручную, то есть:
$authItem->string('name', 'NOT NULL');
$t->string('login', 'UNIQUE NOT NULL');
$t->bool('approved', 'NOT NULL DEFAULT 0');
if (Yii::app()->db->driverName == 'mysql')
$t->options = 'ENGINE=InnoDB DEFAULT CHARSET=utf8';
4. Невозможно средствами миграции вставлять данные в таблицы. Приходится использовать execute()…
+1
SamDark #
Записал в трекер: code.google.com/p/yii/issues/detail?id=1191
0
afunix #
спасибо :) будем надеяться, что они когда-нибудь появятся
0
junqed #
есть плагин www.yiiframework.com/extension/yii-dbmigrations/ в принципе для простых работ сойдет, можно его доработать под себя
0
Viglim #
Отлично, за Gii отдельное спасибо!

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