Цього тижня команда Laravel випустила версію v11.36, яка містить метод Fluent::set(), глобальний псевдонім для нового класу Uri та інші покращення.
Стів Бауман додав метод 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.
Люк Кузміш додав інтерфейс 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 без вказівки простору імен Illuminate\Support:
$uri = Uri::of('https://laravel.com')->withQuery(['name' => 'Taylor']);
Деталі можна знайти у Pull Request #53884.
Повний список нових функцій та оновлень ви можете знайти нижче, а також переглянути різницю між версіями 11.35.0 та 11.36.0 на GitHub. Наступні примітки про випуск прямо з changelog:
config/mail.php з підтримуваними конфігураціями @crynobone в Pull Request.enum_value() у незалежному illuminate/collections @crynobone.Uri та UriQueryString реалізують Stringable @cosmastech.new Stringable замість Str::of і str() від @lucasmichot.Uri до глобальних псевдонімів @jasonmccreary.loadMissing @SychO9.numericAggregate на побудовнику Eloquent @AmirRezaM75.new Fluent замість хелпера fluent() @lucasmichot.Collection::wrap від @lucasmichot.Collection::range від @lucasmichot.schema:dump --prune @andrey-helldar.blank @SanderMuller.Fluent::set @stevebauman.