Цього тижня команда Laravel випустила версію v11.36, яка містить метод Fluent::set(), глобальний псевдонім для нового класу Uri та інші покращення.
# Метод Fluent::set()
Стів Бауман додав метод Fluent::set(), який дозволяє встановлювати глибоко вкладені атрибути за допомогою ланцюгового виклику та нотації з крапкою:
$fluent = new Fluent;
// Встановлення основних атрибутів
$fluent->set('product', 'iPhone')
->set('version', 15)
->set('developer', 'Apple');
// Використання нотації з крапкою для вкладених атрибутів
$fluent->set('specs.color', 'Space Black')
->set('specs.storage', '256GB')
->set('specs.price.usd', 1199);
// Отримання значень
echo $fluent->product; // "iPhone"
echo $fluent->specs['color']; // "Space Black"
echo $fluent->specs['price']['usd']; // 1199
// Отримання значень за допомогою get з нотацією з крапкою
echo $fluent->get('specs.color'); // "Space Black"
echo $fluent->get('specs.price.usd'); // 1199
Реалізація використовує функцію Laravel data_set(), яка є корисним інструментом для роботи з вкладеними масивами:
$data = ['products' => ['desk' => ['price' => 100]]];
data_set($data, 'products.desk.price', 200);
data_get($data, 'products.desk.price'); // 200
Деталі про встановлення даних у екземплярі Fluent можна знайти у Pull Request #53946.
# Uri та UriQueryString реалізують Stringable
Люк Кузміш додав інтерфейс Stringable для класів Uri та UriQueryString. Ці класи вже реалізують інтерфейс Stringable, що включає метод __toString():
use Illuminate\Support\Uri;
$uri = Uri::of('https://laravel.com')
->withQuery(['name' => 'Taylor'])
->withPath('/docs/installation')
->withFragment('hello-world');
// https://laravel.com/docs/installation?name=Taylor#hello-world
(string) $uri;
Дізнайтеся більше про можливості розбору та модифікації URI у публікації про версію Laravel v11.35.
# Uri додано як глобальний псевдонім
Джейсон Маккрейрі додав новий клас Uri як глобальний псевдонім за замовчуванням. Тепер ви можете безпосередньо звертатися до класу Uri без вказівки простору імен Illuminate\Support:
$uri = Uri::of('https://laravel.com')->withQuery(['name' => 'Taylor']);
Деталі можна знайти у Pull Request #53884.
# Примітки до випуску
Повний список нових функцій та оновлень ви можете знайти нижче, а також переглянути різницю між версіями 11.35.0 та 11.36.0 на GitHub. Наступні примітки про випуск прямо з changelog:
# v11.36.0
- [11.x] Оновлено
config/mail.phpз підтримуваними конфігураціями @crynobone в Pull Request. - [11.x] Дозволено використовувати
enum_value()у незалежномуilluminate/collections@crynobone. - [11.x]
UriтаUriQueryStringреалізуютьStringable@cosmastech. - [11.x] Вибір на користь
new StringableзамістьStr::ofіstr()від @lucasmichot. - [11.x] Немає потреби переоголошувати змінні @lucasmichot.
- [11.x] Додано підтримку PHP 8.4 з можливістю передачі змінних @lucasmichot.
- Додано новий клас
Uriдо глобальних псевдонімів @jasonmccreary. - [11.x] Виправлено доступ до мулятора атрибутів у
loadMissing@SychO9. - [11.x] Виправлено
numericAggregateна побудовнику Eloquent @AmirRezaM75. - [11.x] Вибір на користь
new Fluentзамість хелпераfluent()@lucasmichot. - Виправлення від @angelej.
- [11.x]
Collection::wrapвід @lucasmichot. - [11.x] Підвищено мінімальну версію league/commonmark @ah-rahimi.
- [11.x]
Collection::rangeвід @lucasmichot. - [11.x] Додано подію, що повідомляє про видалення файлів при виконанні команди
schema:dump --prune@andrey-helldar. - [11.x] Виправлення: дозволяє ін'єкцію за допомогою кількох інтерфейсів з тією ж реалізацією @jamiethorpe.
- [11.x] Ранній вихід у методі Factory::modelName() @shaedrich.
- [11.x] Запобігти серіалізації моделей Eloquent за допомогою хелпера
blank@SanderMuller. - [11.x] Додати перенос слів до посилань у електронній пошті @seblavoie.
- Зберігати динамічні з'єднання з базою даних під час повторного з'єднання @nickakitch.
- Виправити inconsistency з mutexName через різні шляхи бінарних файлів PHP на кількох серверах @waska14.
- [11.x] Додано метод
Fluent::set@stevebauman. - [11.x] Виправити перевірку стовпців сирих індексів @hafezdivandari.
- [11.x] Дозволити легше переопределяти виключення при недійсному ID у прив'язці маршруту @cosmastech.
- [11.x] Виправити значення шляху клієнта у завантаженнях файлів @gyaaniguy.