Yii 2.0.11

Відбувся реліз PHP-фреймворку Yii версії 2.0.11. Інструкції з оновлення та установці можна знайти на офіційному сайті http://www.yiiframework.com/download/.
Версія 2.0.11 містить більше 110 поліпшень і виправлень.
Чотири невеликі зміни можуть торкнутися існуючі програми, так що варто звернути увагу на UPGRADE.md.
Величезне спасибі нашому чудовому спільноти. Ми зробили це разом!
За процесом розробки Yii 2 можна стежити поставивши зірочку на GitHub. Також у нас є Twitter і Facebook.
Так як вже ведуться роботи над Yii 2.1, переконайтеся, що версія фреймворку
composer.json
прописана
~2.0.11
. В іншому випадку після релізу 2.1 проект може поламатися.
Далі ми розглянемо найцікавіші зміни та покращення, які увійшли в реліз. Повний список доступний CHANGELOG.
Покриття тестами
Ми вирішили не приймати pull request-и без тестів за рідкісним винятком. Це має поліпшити якість коду та скоротити час, затрачуваний на його перевірку. Більше половини pull request-ів для 2.0.11 були прийняті згідно з цим рішенням.
Деякі тести, такі як тести для менеджера URL, зазнали значного рефакторінгу. Методи стали менше читати їх стало простіше.
Олексій Рогачов виконав значну роботу по рефакторінгу, виправлення і покриття тестами JavaScript-частини фреймворка.
Консоль
В консолі Bash і Zsh стало досить просто організувати додаток для команди
./yii
. Налаштування описана в керівництві.
Крім того, при описки консоль підказує існуючі команди з схожим написанням.
Кеш
Стало можливим виставити глобально тривалість зберігання даних в кеші через
yii\caching\Cache::$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' => [
'yii\widgets\LinkPager' => ['maxButtonCount' => 5]
],
'singletons' => [
],
],
];

Детальніше про цю можливість можна прочитати в розділі «application configurations» офіційного керівництва.
Ще трохи зручності та синтаксису
З кожним релізом, щоб зробити розробку приємніше, ми намагаємося зробити помилки все більш корисними і точними. 2.0.11 не виняток. Тепер помилка при спробі звернутися до неіснуючого компоненту повідомляє, що саме це і сталося. Раніше фреймворк лаявся на неможливість автоматичного завантаження класу.
контролер додані для методу:
asJson()
та
asXml()
. Служать вони для віддачі даних у форматі JSON та XML відповідно.
Продуктивність
  • Yii позбувся запитів з умовами виду
    0=1
    , які використовувалися для зв'язків в AR.
  • RBAC навчився пропускати рекурсивні перевірки якщо ролі не присвоєні будь-якого дозволу.
  • Валідатор unique тепер вибирає тільки первинні ключі, а не повний набір даних.
Ще одне покращення безпосередньо не впливає на продуктивність, але безумовно допоможе її збільшити в додатках. Ми почали логировать використання пам'яті і процес зіставлення роутов. Очікуйте відповідних панелей в наступному релізі модуля debug.
Бази даних
yii\db\Query
додані три нових методи:
filterHaving()
,
andFilterHaving()
та
orFilterHaving()
. Вони схожі на інші методи
filter*
, які додають умова тільки якщо значення не порожньо і зазвичай використовуються для різних фільтрів.
Клас
yii\db\Connection
стало приємніше використовувати у випадку з конфігураціями master-slave:
  • Додана опція
    shuffleMasters
    , за допомогою якої можна відключити випадковий вибір master-з'єднання.
  • Додано метод
    getMaster()
    і властивість
    master
    . Вони дозволяють отримати поточний активну master-з'єднання.
\yii\db\Query
тепер можна передавати в
insert()
як безпосередньо другим аргументом, так і в якості значення одного з параметрів:
$db = Yii::$app->db;

// вставляємо query

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

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

// використовуємо query як значення

$titleQuery = new \yii\db\Query()
->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.
Безпека
У фреймворк було включено фільтр
HostControl
, за допомогою якого можна запобігти атаку через підміну хоста. В ідеалі її краще не допускати правильної конфігурації веб-сервера, але так як надійшло досить багато запитів від тих, хто не має доступу до налаштування
сервера, вирішили все-таки включити даний фільтр фреймворк. Детально про налаштування даного фільтра можна прочитати в керівництві.
Також була знайдена і виправлена проблема з екрануванням даних на сторінці помилки в режимі налагодження. Так як проблема не зачіпає робочі сервера, ми не стали випускати окремий патч-реліз.
Інсталятор Composer
Разом з релізом фреймворку ми випускаємо нову версію 2.0.5 інсталлера Composer. Цей плагін для Composer відповідає за встановлення розширень і дозволяє обходитися без конфігурації процесі бутстрапинга. Також він виконує різні завдання при створенні нового проекту. Завдяки Robert Korulczyk, стало можливо виконувати завдання і при
composer install
, що особливо важливо для обробки локальних файлів конфігурації, які тепер можна копіювати за допомогою нового методу
copyFiles
. Більш детально можете почитати в README.
Також плагін почав при оновленні пакету
yiisoft/yii2
повідомляти про важливі зміни з UPGRADE.md.
Підписані коміти і теги
Це перший реліз, з підписаним GPG тегом, що дозволяє перевірити, що він зроблений командою Yii. Пізніше ми опублікуємо детальні інструкції по перевірці.
На GitHub підписані теги можна відрізнити по напису "verified": https://github.com/yiisoft/yii2-framework/releases/tag/2.0.11.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.