Парсинг та модифікація URI у Laravel 11.35

Перекладено ШІ 0 Laravel News 26 червня, 2026

Реліз Laravel v11.35 представив новий клас Uri для зручного парсингу адрес і можливість перетворювати HTTP-відповіді у Fluent-об’єкти. Ознайомтеся з усіма оновленнями, серед яких трейт Conditionable для Request та покращене керування Schedule.

Цього тижня команда Laravel представила версію 11.35. Серед ключових оновлень: інструменти для парсингу та модифікації URI, можливість вимкнути скорочення тексту помилок в HTTP-клієнті, перетворення HTTP-відповідей у Fluent-екземпляри та багато іншого.

# Парсинг та модифікація URI

Тейлор Отвелл додав клас Uri, який спрощує роботу з адресами та їхніми компонентами.

$uri = Uri::of('https://laravel.com')
    ->withQuery(['name' => 'Taylor'])
    ->withPath('/docs/installation')
    ->withFragment('hello-world');
 
$uri->scheme();
$uri->host();
$uri->user();
$uri->password();
$uri->path();
$uri->port();
$uri->query()->all();
$uri->query()->has('name');
$uri->query()->missing('name');
$uri->query()->decode();
 
// Та багато іншого...
 
return (string) $uri;

Ви також можете отримати екземпляр URI з поточного запиту, іменованих маршрутів або звичайних URL:

$uri = $request->uri();
 
$uri = Uri::to('/something')->withQuery(...);
 
$uri = Uri::route('named-route', ['user' => $user]);

Деталі доступні у Pull Request #53731.

# Налаштування скорочення повідомлень про помилки в HTTP-клієнті

Стів Бауман реалізував можливість керувати скороченням тексту у відповідях HTTP-клієнта через конфігурацію завантаження додатка. У колбеку withExceptions() тепер можна змінити ліміт символів або зовсім вимкнути обрізання тексту:

// bootstrap/app.php
 
use Illuminate\Http\Client\RequestException;
 
return Application::configure(basePath: dirname(__DIR__))
    // ...
    ->withExceptions(function (Exceptions $exceptions) {
        $exceptions->dontTruncateRequestExceptions();
 
        // Або так:
 
        $exceptions->truncateRequestExceptionsAt(260);
    })->create();

# Перетворення даних HTTP-відповіді у Fluent-екземпляр

Завдяки внеску Стіва Баумана дані з відповіді HTTP-клієнта тепер можна зручно перетворювати у Fluent-об'єкт:

$fluent = Http::get('https://api.example.com/products/1')->fluent();
 
$fluent->float('price'); // 420.69
$fluent->collect('colors'); // Collection(['red', 'blue'])
$fluent->boolean('on_sale'); // true
$fluent->integer('current_stock'); // 69

# Трейт Conditionable для Request

Ахмет Імамоглу додав трейт Conditionable до класу HTTP-запиту. Тепер у класах запитів можна використовувати метод when() так само як у query builder:

/**
 * Підготовка даних для валідації.
 */
protected function prepareForValidation(): void
{
    $this->when($this->input('account_id'),
        fn (Request $req, int $accountId) => $req->merge(['account_name' => Account::getName($accountId)]),
        fn (Request $req) => $req->merge(['account_name' => null])
 
    )->when($this->input('contact_id'),
        fn (Request $req, int $contactId) => $req->merge(['contact_name' => Contact::getName($contactId)]),
        fn (Request $req) => $req->merge(['contact_name' => null])
    );
}

# Сортування маршрутів у route:list за визначенням

Матьє Тудіско додав можливість сортувати результати команди route:list за параметром definition:

php artisan route:list --sort=definition

Ось як це виглядає на практиці:

# Планувальник завдань: пінгування при успіху або помилці

Лука Кастельнуово додав методи pingOnSuccessIf() та pingOnFailureIf() для планувальника. Це дозволяє системі надсилати запит на вказаний URL лише у разі успішного або невдалого виконання завдання за певної умови:

$pingBackupRun = (bool) config('services.ohdear.tasks.backup:run', false);
$pingBackupRunUrl = config('services.ohdear.tasks.backup:run');
 
Schedule::command('backup:run')->hourly()
    ->pingBeforeIf($pingBackupRun, $pingBackupRunUrl . '/starting')
    ->pingOnSuccessIf($pingBackupRun, $pingBackupRunUrl . '/finished')
    ->pingOnFailureIf($pingBackupRun, $pingBackupRunUrl . '/failed');

Детальніше у документації Laravel: Pinging URLs.

# Нотатки до релізу

Нижче наведено повний список змін. Різницю між версіями 11.34.0 та 11.35.0 можна переглянути на GitHub. Офіційний changelog містить такі пункти:

# v11.35.0

  • [11.x] Підтримка Symfony 7.2 від @crynobone
  • [11.x] Виправлення логіки перепідключення до бази даних від @stancl
  • [11.x] Покращення тестів від @crynobone
  • [11.x] Виправлення foreignIdFor() для неінкрементних цілочисельних ключів (крім ULID) від @edgrosvenor
  • [11.x] Дозволено сортування маршрутів за пріоритетністю у artisan routes:list від @mathieutu
  • [11.x] Оновлення повідомлення для команди schedule:work від @AbdelElrafa
  • [11.x] Підтримка автоматичного виявлення реалізацій PSR-17 від @hafezdivandari
  • [11.x] Покращення обробки помилок у ProcessDriver від @WillTorres10
  • [11.x] Виправлення граматики в коментарях від @nexxai
  • [11.x] Заміна get_called_class на static::class від @fernandokbs
  • [11.x] Додавання пов'язаної моделі pivot при створенні з атрибутів від @alexwass-lr
  • [11.x] Використання послідовного аліасу для Illuminate\Database\Eloquent\Collection від @browner12
  • [11.x] Заміна Collection::make() на new Collection() від @browner12
  • [11.x] Покращення підтримки Enum у Collection через методи firstWhere() та value() від @crynobone
  • [11.x] Додавання трейту Conditionable до Request від @ahmeti
  • [11.x] Ігнорування health endpoint у режимі технічного обслуговування від @joshmanders
  • [11.x] Можливість перетворення Http\Client\Response у Fluent від @stevebauman
  • Встановлення схеми smtps, якщо MAIL_ENCRYPTION === tls від @danielrona
  • [11.x] Виправлення RateLimiter при викориданні динамічних ключів від @MilesChou
  • [11.x] Можливість кастомізації або вимкнення скорочення повідомлень Http\Client\RequestException від @stevebauman
  • [11.x] Додавання pingOnSuccessIf та pingOnFailureIf до планувальника від @lucacastelnuovo
  • [11.x] Додавання класу Uri від @taylorotwell
  • [11.x] Виправлення назв схем у трейті DatabaseTruncation (PostgreSQL та SQLServer) від @hafezdivandari

Популярні

Інше, що варто прочитати

13 Оновлено 26 червня, 2026

Створення CLI-додатка за допомогою Laravel та Docker

Зазирніть у світ Laravel, де потужний CLI-фреймворк відкриває нові можливості для розробки командного інтерфейсу. Дізнайтеся, як створити просту утиліту для перевірки акцій, яка працює з Docker, та які переваги це може принести у вашому проєкті!

10 Оновлено 26 червня, 2026

Laravel: шлях до створення справді дієздатних AI-агентів

Чи готові ви підвищити ефективність своїх проектів на Laravel і спростити інтеграцію штучного інтелекту? У нашій статті ви дізнаєтеся, як Vizra ADK може революціонізувати ваш підхід до розробки, розширюючи можливості, забезпечуючи тестування та надійність для ваших AI-агентів

41 Оновлено 26 червня, 2026

Що нового в PHP 8.5

PHP 8.5 обіцяє безліч нових можливостей, таких як оператор Pipe, функції `array_first()` та `array_last()`, а також нове розширення URI. Чи готові ви дізнатися, як ці функції можуть спростити вашу розробку? Читайте далі, щоб дізнатися більше про ці захоплюючі нововведення