- PVSM.RU - https://www.pvsm.ru -

Yii 2.0.11

Состоялся релиз PHP фреймворка Yii версии 2.0.11. Инструкции по обновлению и установке можно найти на официальном сайте http://www.yiiframework.com/download/ [1].

Версия 2.0.11 содержит более 110 улучшений и исправлений [2].

Четыре небольших изменения могут затронуть существующие приложения, так что стоит обратить внимание на UPGRADE.md [3].

Огромное спасибо нашему замечательному сообществу [4]. Мы сделали это вместе!

За процессом разработки Yii 2 можно следить поставив звёздочку на GitHub [5]. Также у нас есть Twitter [6] и Facebook [7].

Так как уже ведутся работы над Yii 2.1 [8], убедитесь, что версия фреймворка в composer.json прописана как ~2.0.11. В противном случае после релиза 2.1 проект может поломаться.

Далее мы рассмотрим самые интересные изменения и улучшения, вошедшие в релиз. Полный список доступен в CHANGELOG [2].

Покрытие тестами

Мы решили не принимать pull request-ы без тестов за редким исключением. Это должно улучшить качество кода и уменьшить время, затрачиваемое на его проверку. Более половины pull request-ов для 2.0.11 были приняты согласно этому решению.

Некоторые тесты, такие как тесты для менеджера URL, подверглись значительному рефакторингу. Методы стали меньше, читать их стало проще.

Алексей Рогачёв [9] проделал значительную работу по рефакторингу, исправлению и покрытию тестами JavaScript-части фреймворка.

Консоль

В консоли Bash и Zsh стало довольно просто организовать дополнение для команды ./yii. Настройка описана в руководстве [10].

Кроме того, при описках консоль подсказывает существующие команды с похожим написанием.

Кеш

Стало возможным выставить глобально длительность хранения данных в кеше через yiicachingCache::$defaultDuration.

Появился удобный синтаксис:

$data = $cache->getOrSet($key, function () {
    return $this->calculateSomething();
});

Код выше делает то же, что и:

$data = $cache->get($key);
if ($data === false) {
    $data = $this->calculateSomething();
    $cache->set($key, $data);
}

Конфигурация

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

$config = [
    'id' => 'basic',
    // ...
    'container' => [
        'definitions' => [
            'yiiwidgetsLinkPager' => ['maxButtonCount' => 5]
        ],
        'singletons' => [
        ],
    ],
];

Подробнее об этой возможности можно прочитать в разделе «application configurations [11]» официального руководства.

Ещё немного удобства и синтаксиса

С каждым релизом, чтобы сделать разработку приятней, мы пытаемся сделать ошибки всё более полезными и точными. 2.0.11 не исключение. Теперь ошибка при попытке обратиться к несуществующему компоненту сообщает, что именно это и случилось. Ранее фреймворк ругался на невозможность автоматической загрузки класса.

К контроллер добавлены для метода: asJson() и asXml(). Служат они для отдачи данных в формате JSON и XML соответственно.

Производительность

  • Yii избавился от запросов с условиями вида 0=1, которые использовались для связей в AR.
  • RBAC научился пропускать рекурсивные проверки если роли не присвоены какие-либо разрешения.
  • Валидатор unique теперь выбирает только первичные ключи, а не полный набор данных.

Ещё одно улучшение напрямую не влияет на производительность, но определённо поможет её увеличить в приложениях. Мы начали логировать использование памяти и процесс сопоставления роутов. Ожидайте соответствующих панелей в следующем релизе модуля debug.

Базы данных

В yiidbQuery добавлены три новых метода: filterHaving(), andFilterHaving() и orFilterHaving(). Они похожи на остальные методы filter*, которые добавляют условие только если значение не пусто и обычно используются для различных фильтров.

Класс yiidbConnection стало приятнее использовать в случае с конфигурациями master-slave:

  • Добавлена опция shuffleMasters, при помощи которой можно отключить случайный выбор master-соединения.
  • Добавлен метод getMaster() и свойство master. Они позволяют получить текущее активное master-соединение.

yiidbQuery теперь можно передавать в insert() как напрямую вторым аргументом, так и в качестве значения одного из параметров:

$db = Yii::$app->db;

// вставляем query

$sourceQuery = new yiidbQuery()
    ->select([
        'title',
        'content',
    ])->from('{{post_queue}}');

$command = $db->createCommand();
$command->insert('{{post}}', $sourceQuery);

// используем query как значение

$titleQuery = new yiidbQuery()
    ->select('title')->from('{{titles}}')->limit(1);

$command = $db->createCommand();
$command->insert('{{post}}', [
    'title' => $titleQuery,
    'content' => 'Привет!',
]);

Совместимость с PHP 7

Мы постоянно проверяем фреймворк на совместимость с PHP 7. К 2.0.11 мы нашли и исправили проблему, связанную с обработкой ошибок и Throwable.

Менеджер URL

При генерации URL через UrlManager::createAbsoluteUrl(), Url::to() или Url::toRoute() теперь можно указать схему как пустую для создания протоколо-независимых URL:

echo Url::to('@web/images/logo.gif', '');
// //www.example.com/images/logo.gif

Также при генерации URL стали не обязательными параметры, для которых существуют значения по умолчанию:

echo Url::to(['post/index', 'page' => 1, 'tag' => '']);

// теперь можно так:

echo Url::to(['post/index', 'page' => 1]);

Виджеты

Расширяемость виджетов была значительно улучшена. Добавлены события при инициализации, перед стартом рендеринга и после его завершения. Примеры применения смотрите в описании issue [12].

Безопасность

В фреймворк было включен фильтр HostControl, при помощи которого можно предотвратить атаку через подмену хоста. В идеале её лучше не допускать правильной конфигурацией веб-сервера, но так как поступило довольно много запросов от тех, кто не имеет доступа к настройке
сервера, решили всё-таки включить данный фильтр в фреймворк. Детально о настройке данного фильтра можно прочитать в руководстве [13].

Также была найдена и исправлена проблема с экранированием данных на странице ошибки в режиме отладки. Так как проблема не затрагивает рабочие сервера, мы не стали выпускать отдельный патч-релиз.

Инсталлятор Composer

Вместе с релизом фреймворка мы выпускаем новую версию 2.0.5 инсталлера Composer [14]. Этот плагин для Composer отвечает за установку расширений и позволяет обходиться без конфигурации в процессе бутстрапинга [15]. Также он выполняет разные задачи при создании нового проекта. Благодаря Robert Korulczyk [16], стало возможно выполнять задачи и при composer install, что особенно важно для обработки локальных файлов конфигурации, которые теперь можно копировать при помощи нового метода copyFiles. Более детально можете почитать в README [17].

Также плагин начал при обновлении пакета yiisoft/yii2 уведомлять о важных изменениях из UPGRADE.md [3].

Подписанные коммиты и теги

Это первый релиз, с подписанным GPG тегом, что позволяет проверить, что он сделан командой Yii. Позже мы опубликуем детальные инструкции по проверке.

На GitHub подписанные теги можно отличить по надписи "verified": https://github.com/yiisoft/yii2-framework/releases/tag/2.0.11 [18].

Автор: SamDark

Источник [19]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/framework/239330

Ссылки в тексте:

[1] http://www.yiiframework.com/download/: http://www.yiiframework.com/download/

[2] 110 улучшений и исправлений: https://github.com/yiisoft/yii2/blob/2.0.11/framework/CHANGELOG.md

[3] UPGRADE.md: https://github.com/yiisoft/yii2/blob/2.0.11/framework/UPGRADE.md

[4] замечательному сообществу: https://github.com/yiisoft/yii2/graphs/contributors

[5] GitHub: https://github.com/yiisoft/yii2

[6] Twitter: https://twitter.com/yiiframework

[7] Facebook: https://www.facebook.com/groups/yiitalk/

[8] ведутся работы над Yii 2.1: https://github.com/yiisoft/yii2/tree/2.1

[9] Алексей Рогачёв: https://github.com/arogachev

[10] описана в руководстве: https://github.com/yiisoft/yii2/blob/master/docs/guide/tutorial-console.md#console-command-completion-

[11] application configurations: http://www.yiiframework.com/doc-2.0/guide-concept-configurations.html#application-configurations

[12] описании issue: https://github.com/yiisoft/yii2/issues/7435

[13] можно прочитать в руководстве: http://www.yiiframework.com/doc-2.0/guide-security-best-practices.html#avoiding-host-header-attacks

[14] инсталлера Composer: https://github.com/yiisoft/yii2-composer

[15] процессе бутстрапинга: http://www.yiiframework.com/doc-2.0/guide-structure-extensions.html#bootstrapping-classes

[16] Robert Korulczyk: https://github.com/rob006

[17] README: https://github.com/yiisoft/yii2-composer#usage

[18] https://github.com/yiisoft/yii2-framework/releases/tag/2.0.11: https://github.com/yiisoft/yii2-framework/releases/tag/2.0.11

[19] Источник: https://habrahabr.ru/post/320906/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best