- PVSM.RU - https://www.pvsm.ru -
Состоялся релиз 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 соответственно.
0=1
, которые использовались для связей в AR.Ещё одно улучшение напрямую не влияет на производительность, но определённо поможет её увеличить в приложениях. Мы начали логировать использование памяти и процесс сопоставления роутов. Ожидайте соответствующих панелей в следующем релизе модуля 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. К 2.0.11 мы нашли и исправили проблему, связанную с обработкой ошибок и Throwable
.
При генерации 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].
Также была найдена и исправлена проблема с экранированием данных на странице ошибки в режиме отладки. Так как проблема не затрагивает рабочие сервера, мы не стали выпускать отдельный патч-релиз.
Вместе с релизом фреймворка мы выпускаем новую версию 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
Нажмите здесь для печати.