Вышел релиз 1.1.16 PHP-фреймворка Yii. Вы можете скачать его по адресу yiiframework.com/download/.
В данный релиз вошло более 120 улучшений и исправлений. Полный список изменений можно посмотреть здесь. Внимание: не все изменения совместимы с предыдущей версией. Внимательно прочитайте инструкции по обновлению.
Спасибо всем, кто нам помогал и без кого этот релиз бы не состоялся.
Отметим, что Yii 1.1 перешёл в режим поддержки, то есть не стоит ждать каких-либо новых возможностей или больших изменений в будущем. В данный момент мы активно разрабатываем и поддерживаем Yii 2.0, в котором используются свежие технологии. Следить за развитием Yii 2 можно поставив звёздочку или нажав на кнопку «watch» на странице проекта на GitHub. Присоединяйтесь к нашим Twitter и Facebook.
Далее мы расскажем о главных улучшениях.
База данных и ActiveRecord
Поддержка баз данных улучшается постоянно. На этот раз мы добавили поддержку MariaDB и CUBRID.
ODBC теперь можно использовать через pdo_odbc
:
'components'=>array(
......
'db'=>array(
'class'=>'CDbConnection'
'driverName'=>'mysql',
'connectionString'=>'odbc:Driver={MySQL};Server=127.0.0.1;Database=test',
'username'=>'',
'password'=>'',
),
),
При задании связей типа STAT можно использовать именованные группы параметров:
public function relations()
{
return array(
'recentPostCount'=>array(self::STAT,'Post','author_id','scopes'=>'recentScope'),
);
}
Теперь в реляционных запросах можно задать операции, применяемые после JOIN
(то есть use|force|ignore index()):
$users=User::model()->findAll(array(
'select'=>'t.id,t.name',
'with'=>array(
'posts'=>array(
'alias'=>'p',
'select'=>'p.id,p.title',
'joinOptions'=>'USE INDEX(post__user)',
),
),
));
Подробнее можно почитать в разделе «Post-JOIN operations» в главе «Relational Active Record» полного руководства.
Были добавлены CDbCommand::naturalLeftJoin()
и CDbCommand::naturalRightJoin()
, которые позволяют использовать соответствующие типы join.
Стало возможным перекрыть первичный ключ модели через метод primaryKey()
даже в том случае, если в таблице есть первичный ключ.
Файлы
В CFileHelper
добавлены новые методы:
createDirectory()
— создаёт директорию, выставляя рекурсивно права.getExtensionByMimeType()
— определяет расширение файла по типу MIME.
Определение MIME типа было улучшено использованием файла mime.types
из Apache HTTP.
CFileHelper::removeDirectory()
теперь нормально работает с символическими ссылками на директории. Сделать «как было» можно передав ключ traverseSymlinks
со значением false
в массиве опций.
В CFileHelper::findFiles()
добавлена новая опция absolutePaths
. Если её выставить в
true
, метод будет возвращать абсолютные пути. true
является значением по умолчанию.
В CFileCache
добавлены свойства cachePathMode
и cacheFileMode
, которые могут быть использованы для выполнения chmod()
соответствующих директорий.
Обновления
Несколько библиотек, используемых фреймворком, были обновлены:
- jQuery до 1.11.1.
- jQuery UI до 1.11.2.
- Плагин Multifile, используемый CMultiFileUpload до 1.48.
- HTMLPurifier до 4.6.0.
- Данные для i18n до CLDR23.1, в которой были добавлены новые локали, больше данных и есть важные исправления.
HTML5
Когда мы выпустили первую версию Yii 1.1, фактическим стандартом разметки был XHTML. Теперь же
это HTML5, поэтому мы решили обновить шаблон приложения, генерируемый при помощи yiic webapp
до HTML5.
CHtml
и CActiveForm
получили поддержку полей ввода HTML5, таких как color, datetime, datetime-local, week и search.
Совместимость
Различные инструменты и библиотеки, часто используемые с Yii, были обновлены, так что мы обновили фреймворк для их поддержки.
CApcCache
теперь совместим с APCu.Yii::import()
иYii::createComponent()
теперь совместимы со сторонними автозагрузчиками классов, такими как загрузчик Composer.Yii
иYiiBase
были добавлены в автозагрузку вcomposer.json
.- Тесты теперь нормально работают с PHPUnit 3.8+.
Request
Request научился работать с заголовком X-HTTP-Method-Override
, используемым для эмуляции различных типов запроса через POST.
Новые методы getIsPatchRequest()
, getIsPatchViaPostRequest()
и getPatch()
позволяют работать с запросами типа PATCH.
Фреймворк теперь отвечает с той же версией протокола HTTP, которая содержалась в запросе.
Request::getPreferredLanguage()
теперь может выбирать лучший вариант в зависимости от поддерживаемых и запрашиваемых языков.
Обработка ошибок
Обработка ошибок была улучшена.
- Объект исключения теперь доступен через
ErrorHandler::getException()
, что делает возможным его передачу различным сторонним API. - Добавлена поддержка записи логов в Syslog.
CClientScript
теперь кидает исключение, если вы пытаетесь зарегистрировать несуществующий пакет.- В
CActiveForm::$clientOptions
добавленerrorCallback
. Теперь вы можете вклиниться в процесс клиентской валидации.
И ещё немного
- В веб-сервисы добавлена поддержка заголовков SOAP и кодирование document/literal.
- CJSON теперь умеет использовать
JsonSerializable
. CHtml::beginForm()
научился работать с дополнительными методами HTTP через скрытое поле_method
.CPasswordHelper::generateSalt()
теперь возвращает соль с cost =$2y$
.
CFormatter
научился работать с DateTime
.
Автор: SamDark