Yii 2.0.3
Точно в срок вышел релиз PHP фреймворка Yii версии 2.0.3. Порядок обновления и установки описан на странице http://www.yiiframework.com/download/.В данную версию вошли около 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 обрабатывается особым образом:
// выдаёт:
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: 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 для достижения сходного эффекта.