Как по часам, вышел очередной стабильный релиз замечательного php-фреймворка Yii 2.
Версия 2.0.3 является патч-релизом и содержит около 50 улучшений и исправлений ошибок. Полный перечень изменений можно найти здесь. По доброй традиции, над улучшениями и исправления трудилось большое количество участников сообщества.
Отдельно хочу отметить, что документация не отстает от самого фреймворка и активно дописывается и переводится на большое количество языков.
Поддержать проект можно присоединившись к сообществу:
Рассмотрим некоторые из улучшений в этом релизе.
Изменения в крипто-библиотеке
Большие изменения произошли «под капотом» криптографической библиотеки yii2. Класс yii\base\Security теперь использует библиотеку OpenSSL, а не старушку Mcrypt, которая не поддерживается авторами уже 8 лет. Отдельные благодарности Tom Worster. Библиотека OpenSSL нативно поддерживается php, так что, проблем с обратной совместимостью возникнуть не должно.
Кеширование RBAC
При использовании базы данных для хранения информации RBAC, могут проявляться проблемы с производительностью, так как, при каждой проверке прав доступа, может выполняться большое число запросов SQL. Для улучшения производительности, в класс yii\rbac\DbManager добавлен механизм кеширования. Это позволило сохранять всю иерархию RBAC в кеше и увеличить производительность при использовании checkAccess(). По умолчанию, кеширование RBAC отключено. Для включения кеша RBAC нужно изменить настройки приложения. Пример:
return [ 'components' => [ 'authManager' => [ 'class' => 'yii\rbac\DbManager', 'cache' => 'cache', // this enables RBAC caching ], 'cache' => [ 'class' => 'yii\caching\ApcCache', ] // ... ], ]
Кеширование страниц
До этого времени, кеширование страниц было ограничено только кешем HTML содержимого. И при попытке использования его для кеширования RESTful ответов, могли возникать ошибки из-за неправильного форматат ответа. В текущем релизе Yii 2.0.3, класс yii\filters\PageCache позволяет кешировать ответы с различными видами данных.
Как кешировать действие index контроллера RESTful. Пример реализации с использованием поведения:
public function behaviors() { return [ [ 'class' => 'yii\filters\PageCache', 'only' => ['index'], 'duration' => 60, ], ]; }
Изменение текущего адреса url
Новый метод хэлпера yii\helpers\Url::current() позволяет легко изменять текущий url запроса. Возможно добавление или удаление GET параметров. Пример:
// assume $_GET = ['id' => 123, 'src' => 'google'], current route is "post/view" // /index.php?r=post/view&id=123&src=google echo Url::current(); // /index.php?r=post/view&id=123 echo Url::current(['src' => null]); // /index.php?r=post/view&id=100&src=google echo Url::current(['id' => 100]);
Отключение ротации логов
При использовании класса yii\log\FileTarget для вывода данных в лог-файлы, теперь возможно отключение автоматической ротации файлов. Это удобно и особенно полезно, при использовании внешних инструментов для ротации файлов.
Как отключить ротацию логов в Yii 2.0. В конфигурации приложения нужно указать параметр enableRotation со значением false. Пример:
return [ 'components' => [ 'log' => [ 'targets' => [ [ 'class' => 'yii\log\FileTarget', 'enableRotation' => false, ], ], ], ], ];
Атрибуты data
При использовании хэлпера yii\helpers\Html для генерации html тегов, теперь можно использовать атрибут data напрямую. Пример:
// displays: <div data-name="xyz" data-age="20"></div> echo Html::tag('div', '', ['data' => ['name' => 'xyz', 'age' => 20]]);
При работе с AngularJS, полезно будет использование атрибутов ng и data-ng напрямую.
Обрезка входных данных
При использовании правила валидации trim, теперь доступна обрезка пустых символов на стороне клиента. Для отключения данной возможности, достаточно установить параметр правила trim enableClientValidation в false.
Максимальная длинна поля ввода
Теперь, при использовании методов yii\helpers\Html::activeTextInput() или yii\widgets\ActiveField::textInput(), для создания поля ввода, возможно указать атрибут maxlenght. В таком случае, при наличии правила валидации с ограничением длинны строки, это ограничение будет установлено и для соответствующего поля ввода. Пример:
// assume "name" has a validation rule: ['name', 'string', 'max' => 128] // generates: <input type="text" ... maxlength="128"> echo Html::activeTextInput($model, 'name', ['maxlength' => true]);
Заключение
Не отставайте от фреймворка, читайте доку, творите, наслаждайтесь;)