Точно в срок вышел релиз PHP фреймворка Yii версии 2.0.3. Порядок обновления и установки описан на странице http://www.yiiframework.com/download/.
В данную версию вошли около 50 улучшений и исправлений. Полный список можно посмотреть на GitHub. Пользуясь случаем команда выражает благодарность всем, кто нам помогает.
Отдельное спасибо тем, кто улучшает документацию и переводит её на множество языков.
За процессом разработки фреймворка удобно следить на GitHub, поставив проекту звёздочку или использовав кнопку watch. Подписывайтесь на наш Twitter и Facebook.
Ниже мы рассмотрим самые важные улучшения данной версии.
Это довольно серьёзное изменение, хоть и внутреннее. Для
Если вы храните данные RBAC в базе данных, вы могли заметить, что производительность при этом не идеальная: каждая проверка выливается в достаточно весомое количество SQL запросов. Для того, чтобы это исправить, мы добавили кэширование в
Ранее кэширование страниц ограничивалось лишь HTML. Оно не работало для REST API из за неправильных HTTP заголовков. Теперь можно использовать
Ещё одно улучшение на тему кэширования — поддержка принудительной загрузки свежих ресурсов, которая часто полезна на рабочих серверах в том случае, когда включено HTTP кэширование JS или CSS файлов. В этом случае, даже если вы вносите изменения в файлы ресурсов, клиент может получать старую версию из кэша. Теперь можно установить свойству
Был добавлен новый метод
Если вы пишете логи в файлы через
При использовании
Теперь так же обрабатываются
Вы можете задать, какие атрибуты обрабатывать особым образом добавив их в
Если вы используете правило валидации
При использовании
Теперь вы можете использовать новый интерфейс
Ранее было необходимо наследоваться от
В данную версию вошли около 50 улучшений и исправлений. Полный список можно посмотреть на GitHub. Пользуясь случаем команда выражает благодарность всем, кто нам помогает.
Отдельное спасибо тем, кто улучшает документацию и переводит её на множество языков.
За процессом разработки фреймворка удобно следить на GitHub, поставив проекту звёздочку или использовав кнопку watch. Подписывайтесь на наш Twitter и Facebook.
Ниже мы рассмотрим самые важные улучшения данной версии.
Криптография
Это довольно серьёзное изменение, хоть и внутреннее. Для
yii\base\Security
мы заменили Mcrypt (который заброшен уже восемь лет) на OpenSSL, за что стоит сказать спасибо Tom Worster, который присматривает за безопасностью Yii. Так как OpenSSL присутствует по умолчанию в большинстве дистрибутивов PHP, проблем с совместимостью возникнуть не должно. Но, если уж возникнут, обязательно сообщите.Кэширование RBAC
Если вы храните данные RBAC в базе данных, вы могли заметить, что производительность при этом не идеальная: каждая проверка выливается в достаточно весомое количество SQL запросов. Для того, чтобы это исправить, мы добавили кэширование в
yii\rbac\DbManager
. Вся иерархия хранится в кэше, что намного увеличивает производительность checkAccess()
. По умолчанию кэширование RBAC выключено. Включается следующим образом:return [
'components' => [
'authManager' => [
'class' => 'yii\rbac\DbManager',
'cache' => 'cache', // <---- вот так
],
'cache' => [
'class' => 'yii\caching\ApcCache',
]
// ...
],
]
Кэширование страниц
Ранее кэширование страниц ограничивалось лишь HTML. Оно не работало для REST API из за неправильных HTTP заголовков. Теперь можно использовать
yii\filters\PageCache
для кэширования различных типов данных и заголовков. Вот так можно кэшировать действие index
REST-контроллера:public function behaviors()
{
return [
[
'class' => 'yii\filters\PageCache',
'only' => ['index'],
'duration' => 60,
],
];
}
Принудительная загрузка свежих ресурсов
Ещё одно улучшение на тему кэширования — поддержка принудительной загрузки свежих ресурсов, которая часто полезна на рабочих серверах в том случае, когда включено HTTP кэширование JS или CSS файлов. В этом случае, даже если вы вносите изменения в файлы ресурсов, клиент может получать старую версию из кэша. Теперь можно установить свойству
yii\web\AssetManager::appendTimestamp
значение true. К URL ресурсов JS и CSS будет добавлено время изменения файлов, так что клиент будет всегда получать последнюю версию:return [
'components' => [
'assetManager' => [
'class' => 'yii\web\AssetManager',
'appendTimestamp' => true,
],
// ...
],
]
Изменения текущего URL
Был добавлен новый метод
yii\helpers\Url::current()
, который облегчает задачу изменения текущего URL путём добавления или удаления GET-параметров:// допустим, $_GET = ['id' => 123, 'src' => 'google'], текущий маршрут "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
, то теперь можете отключить автоматическую ротацию файлов, что полезно, если этим занимаются дополнительные утилиты:return [
'components' => [
'log' => [
'targets' => [
[
'class' => 'yii\log\FileTarget',
'enableRotation' => false,
],
],
],
],
];
Атрибуты data
При использовании
yii\helpers\Html
атрибут data
обрабатывается особым образом:// выдаёт: <div data-name="xyz" data-age="20"></div>
echo Html::tag('div', '', ['data' => ['name' => 'xyz', 'age' => 20]]);
Теперь так же обрабатываются
ng
и data-ng
. Это полезно прежде всего тем, кто работает с AngularJS. Для остальных атрибутов массив будет преобразован в JSON.Вы можете задать, какие атрибуты обрабатывать особым образом добавив их в
yii\helpers\Html::$dataAttributes
.Обрезка входных данных
Если вы используете правило валидации
trim
, вы обнаружите, что обрезка теперь производится и на клиенте. Отключить данное поведение можно задав свойству enableClientValidation
правила валидации trim
значение false.Максимальная длина поля
При использовании
yii\helpers\Html::activeTextInput()
или yii\widgets\ActiveField::textInput()
для создания полей ввода вам может понадобиться задать свойство maxlength
. Если у соответствующего поля модели есть правило валидации string
, maxlength
можно брать из него. Для этого maxlength
необходимо указать значение true:// у "name" есть правило валидации: ['name', 'string', 'max' => 128]
// generates: <input type="text" ... maxlength="128">
echo Html::activeTextInput($model, 'name', ['maxlength' => true]);
Конфигурируемые объекты
Теперь вы можете использовать новый интерфейс
yii\base\Configurable
для того, чтобы пометить класс как «конфигурируемый». В этом случае yii\di\Container
ждёт, что конструктор принимает массив конфигурации:class Foo implements \yii\base\Configurable
{
public function __construct($a, $b, $config = [])
{
}
}
$container = new \yii\di\Container;
$object = $container->get('Foo', [1, 2], ['prop1' => 3]);
// эквивалентно: $object = new Foo(1, 2, ['prop1' => 3]);
Ранее было необходимо наследоваться от
yii\base\Object
для достижения сходного эффекта.