Yii 2.0.3

в 20:58, , рубрики: framework, php, yii

Точно в срок вышел релиз PHP фреймворка Yii версии 2.0.3. Порядок обновления и установки описан на странице http://www.yiiframework.com/download/.

В данную версию вошли около 50 улучшений и исправлений. Полный список можно посмотреть на GitHub. Пользуясь случаем команда выражает благодарность всем, кто нам помогает.

Отдельное спасибо тем, кто улучшает документацию и переводит её на множество языков.

За процессом разработки фреймворка удобно следить на GitHub, поставив проекту звёздочку или использовав кнопку watch. Подписывайтесь на наш Twitter и Facebook.

Ниже мы рассмотрим самые важные улучшения данной версии.

Криптография

Это довольно серьёзное изменение, хоть и внутреннее. Для yiibaseSecurity мы заменили Mcrypt (который заброшен уже восемь лет) на OpenSSL, за что стоит сказать спасибо Tom Worster, который присматривает за безопасностью Yii. Так как OpenSSL присутствует по умолчанию в большинстве дистрибутивов PHP, проблем с совместимостью возникнуть не должно. Но, если уж возникнут, обязательно сообщите.

Кэширование RBAC

Если вы храните данные RBAC в базе данных, вы могли заметить, что производительность при этом не идеальная: каждая проверка выливается в достаточно весомое количество SQL запросов. Для того, чтобы это исправить, мы добавили кэширование в yiirbacDbManager. Вся иерархия хранится в кэше, что намного увеличивает производительность checkAccess(). По умолчанию кэширование RBAC выключено. Включается следующим образом:

return [
    'components' => [
        'authManager' => [
            'class' => 'yiirbacDbManager',
            'cache' => 'cache',   // <---- вот так
        ],
        'cache' => [
            'class' => 'yiicachingApcCache',
        ]
        // ...
    ],
]

Кэширование страниц

Ранее кэширование страниц ограничивалось лишь HTML. Оно не работало для REST API из за неправильных HTTP заголовков. Теперь можно использовать yiifiltersPageCache для кэширования различных типов данных и заголовков. Вот так можно кэшировать действие index REST-контроллера:

public function behaviors()
{
    return [
        [
            'class' => 'yiifiltersPageCache',
            'only' => ['index'],
            'duration' => 60,
        ],
    ];
}

Принудительная загрузка свежих ресурсов

Ещё одно улучшение на тему кэширования — поддержка принудительной загрузки свежих ресурсов, которая часто полезна на рабочих серверах в том случае, когда включено HTTP кэширование JS или CSS файлов. В этом случае, даже если вы вносите изменения в файлы ресурсов, клиент может получать старую версию из кэша. Теперь можно установить свойству yiiwebAssetManager::appendTimestamp значение true. К URL ресурсов JS и CSS будет добавлено время изменения файлов, так что клиент будет всегда получать последнюю версию:

return [
    'components' => [
        'assetManager' => [
            'class' => 'yiiwebAssetManager',
            'appendTimestamp' => true,
        ],
        // ...
    ],
]

Изменения текущего URL

Был добавлен новый метод yiihelpersUrl::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]);

Отключение ротации логов

Если вы пишете логи в файлы через yiilogFileTarget, то теперь можете отключить автоматическую ротацию файлов, что полезно, если этим занимаются дополнительные утилиты:

return [
    'components' => [
        'log' => [
            'targets' => [
                [
                    'class' => 'yiilogFileTarget',
                    'enableRotation' => false,
                ],
            ],
        ],
    ],
];

Атрибуты data

При использовании yiihelpersHtml атрибут data обрабатывается особым образом:

// выдаёт: <div data-name="xyz" data-age="20"></div>
echo Html::tag('div', '', ['data' => ['name' => 'xyz', 'age' => 20]]);

Теперь так же обрабатываются ng и data-ng. Это полезно прежде всего тем, кто работает с AngularJS. Для остальных атрибутов массив будет преобразован в JSON.

Вы можете задать, какие атрибуты обрабатывать особым образом добавив их в yiihelpersHtml::$dataAttributes.

Обрезка входных данных

Если вы используете правило валидации trim, вы обнаружите, что обрезка теперь производится и на клиенте. Отключить данное поведение можно задав свойству enableClientValidation правила валидации trim значение false.

Максимальная длина поля

При использовании yiihelpersHtml::activeTextInput() или yiiwidgetsActiveField::textInput() для создания полей ввода вам может понадобиться задать свойство maxlength. Если у соответствующего поля модели есть правило валидации string, maxlength можно брать из него. Для этого maxlength необходимо указать значение true:

// у "name" есть правило валидации: ['name', 'string', 'max' => 128]
// generates: <input type="text" ... maxlength="128">
echo Html::activeTextInput($model, 'name', ['maxlength' => true]);

Конфигурируемые объекты

Теперь вы можете использовать новый интерфейс yiibaseConfigurable для того, чтобы пометить класс как «конфигурируемый». В этом случае yiidiContainer ждёт, что конструктор принимает массив конфигурации:

class Foo implements yiibaseConfigurable
{
    public function __construct($a, $b, $config = [])
    {
    }
}

$container = new yiidiContainer;
$object = $container->get('Foo', [1, 2], ['prop1' => 3]);
// эквивалентно: $object = new Foo(1, 2, ['prop1' => 3]);

Ранее было необходимо наследоваться от yiibaseObject для достижения сходного эффекта.

Автор: SamDark

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js