7 июня вышла очередная ежемесячная версия фреймворка Yii — 1.0.6. Рассмотрим список и немного деталей самых примечательных изменений.
Добавленная поддержка named scopes для методов update() и delete(), а также для with(). Можно использовать следующие приемы:
Добавлен профайлинг sql-запросов. Благодаря CProfileLogRoute можно теперь измерить сколько времени исполняется каждый из запросов. Также можно использовать CDbConnection::getStats() для получения общего количества выполненных sql-запросов и их общего времени исполнения.
Появилась возможность записи в лог дополнительной контекстной информации (например, переменных $_GET, $_SERVER, идентификатора сессии, имя пользователя и т.д.).
Это настривается с помощью свойства CLogRoute::filter. Например:
Каждое правило преобразования ссылок можно настраивать более гибко с помощью опций urlSuffix и caseSensetive. Теперь правило преобразования может приобретать следующий вид:
А вот с помощью CUrlManager::useStrictParsing можно включить режим преобразования ссылок основанный исключительно на правилах. Тогда, например, ссылки с неопределенными в правилах GET-переменными будут отображаться в виде /page?var=value, а не /page/var/value/. Это работает только, если urlFormat равен 'path'.
Теперь Yii позволяет использовать действие контроллера для обработки ошибок. Определяется это в файле конфигурации:
А в нужном действии нужного контроллера используем Yii::app()->errorHandler->error.
Отныне консоль умеет одним запросом генерировать модели для всех таблиц базы данных, а также автоматически связи.
Класс для хранения кеша в файлах, который раньше появился, как расширение Yii, теперь введен в дистрибутив и называется — CFileCache.
Улучшен и теперь работает и с memcache, и с memcached.
При использовании MySQL поля типа tinyint(1) определяются как булевые.
Воспользовавшись ссылками в тексте, можно более делательно изучить освещенные изменения.
Развитие named scopes
Добавленная поддержка named scopes для методов update() и delete(), а также для with(). Можно использовать следующие приемы:
Post::model()->published()->recently()->delete();
$posts=Post::model()->with('comments:recently:approved')->findAll();
class User extends CActiveRecord { public function relations() { return array( 'posts'=>array(self::HAS_MANY, 'Post', 'authorID', 'with'=>'comments:approved'), ); } }
Профайлинг SQL
Добавлен профайлинг sql-запросов. Благодаря CProfileLogRoute можно теперь измерить сколько времени исполняется каждый из запросов. Также можно использовать CDbConnection::getStats() для получения общего количества выполненных sql-запросов и их общего времени исполнения.
Журналирование контекста
Появилась возможность записи в лог дополнительной контекстной информации (например, переменных $_GET, $_SERVER, идентификатора сессии, имя пользователя и т.д.).
Это настривается с помощью свойства CLogRoute::filter. Например:
return array( // ... 'preload'=>array('log', 'session'), // ... 'components'=>array( // ... 'log'=>array( 'class'=>'CLogRouter', 'routes'=>array( array( 'class'=>'CWebLogRoute', 'levels'=>'trace,info,error,warning', 'filter' => array( 'class' => 'CLogFilter', 'prefixSession' => true, 'prefixUser' => false, 'logUser' => false, 'logVars' => array(), ), ), ),
Улучшение ЧПУ
Каждое правило преобразования ссылок можно настраивать более гибко с помощью опций urlSuffix и caseSensetive. Теперь правило преобразования может приобретать следующий вид:
'pattern1'=>array('route1', 'urlSuffix'=>'.xml', 'caseSensitive'=>false)
А вот с помощью CUrlManager::useStrictParsing можно включить режим преобразования ссылок основанный исключительно на правилах. Тогда, например, ссылки с неопределенными в правилах GET-переменными будут отображаться в виде /page?var=value, а не /page/var/value/. Это работает только, если urlFormat равен 'path'.
Обработка ошибок в контроллере
Теперь Yii позволяет использовать действие контроллера для обработки ошибок. Определяется это в файле конфигурации:
return array( ...... 'components'=>array( 'errorHandler'=>array( 'errorAction'=>'site/error', ), ), );
А в нужном действии нужного контроллера используем Yii::app()->errorHandler->error.
Другие приятные мелочи
Улучшения консоли
Отныне консоль умеет одним запросом генерировать модели для всех таблиц базы данных, а также автоматически связи.
Файловый кеш
Класс для хранения кеша в файлах, который раньше появился, как расширение Yii, теперь введен в дистрибутив и называется — CFileCache.
CMemCache
Улучшен и теперь работает и с memcache, и с memcached.
Драйвер MySQL
При использовании MySQL поля типа tinyint(1) определяются как булевые.
Воспользовавшись ссылками в тексте, можно более делательно изучить освещенные изменения.