PHP 8.5 представляє нове розширення для роботи з URI.

0
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 15 жовтня, 2025
PHP 8.5 приносить нове розширення URI, яке відповідає стандартам та значно полегшує роботу з URL. Дізнайтеся, як Laravel, використовуючи потужний клас URI, може спростити ваші проєкти, і чому вам варто впровадити ці нові можливості у своєму коді

PHP 8.5 презентує нове URI-розширення, яке є стандартним парсером, що відповідає вимогам RFC 3986 і стандарту URL WHATWG, та завжди доступне в стандартній бібліотеці під назвою 'URI'. Документ RFC містить безліч прикладів, ось один з них з посту-анонсу PHP Foundation, що демонструє клас Uri для RFC 3986:

use Uri\Rfc3986\Uri;
 
$url = new Uri('HTTPS://thephp.foundation:443/sp%6Fnsor/');
 
$defaultPortForScheme = match ($url->getScheme()) {
    'http' => 80,
    'https' => 443,
    'ssh' => 22,
    default => null,
};
 
// Видалення стандартних портів з URL.
if ($url->getPort() === $defaultPortForScheme) {
    $url = $url->withPort(null);
}
 
// Геттери нормалізують URL за замовчуванням. Варіанти `Raw` 
// повертають введене значення без змін.
 
echo $url->toString(), PHP_EOL;
// Виводить: https://thephp.foundation/sponsor/
echo $url->toRawString(), PHP_EOL;
// Виводить: HTTPS://thephp.foundation/sp%6Fnsor/

У разі виникнення помилки парсингу створення нового екземпляра викличе виняток UrlValidationError, а статичний метод parse() поверне помилки в переданій змінній:

$url = new Uri\WhatWg\Url("invalid url");
// Виникає Uri\WhatWg\InvalidUrlException
 
$errors = [];
$url = Uri\WhatWg\Url::parse("invalid url", null, $errors);
// Повертається null, а масив об'єктів UrlValidationError
// передається за посиланням до $errors
 
/*
array(1) {
  [0]=>
  object(Uri\WhatWg\UrlValidationError)#1 (2) {
    ["context"]=>
    string(11) "invalid uri"
    ["type"]=>
    enum(Uri\WhatWg\UrlValidationErrorType::MissingSchemeNonRelativeUrl)
    ["failure"]=>
    bool(true)
  }
}
*/

# URIs у Laravel

Хоча важливо, що PHP 8.5 запроваджує компонент URI, сумісний з RFC, для широкої спільноти PHP знадобиться деякий час, щоб повною мірою використати його можливості. Наприклад, поки фреймворки на зразок Laravel не визначать PHP 8.5 як мінімально необхідну версію, вони не зможуть використовувати його нові можливості. Проте ви можете використовувати функції PHP 8.5 у своєму додатку, навіть якщо фреймворки відстають на одну-дві версії.

Тим часом клас URI, введений у Laravel 11.35, використовує пакет league/uri, який реалізує RFC 3986. Клас URI Laravel є потужним і буде працювати з Laravel версії 11.35 і вище 💪.

use Illuminate\Support\Uri;
 
$uri = Uri::of('https://laravel-news.com')
    ->withPath('links')
    ->withQuery(['page' => 2])
    ->withFragment('new');
 
(string) $url; // https://laravel-news.com/links?page=2#new
 
$uri->path(); // links
$uri->scheme(); // https
$uri->port(); // null
$uri->host(); // laravel-news.com

# Дізнайтеся більше

Популярні

Logomark Logotype

Журнал аудиту в Laravel

Хочете забезпечити повну прозорість у своїх Laravel-додатках? Пакет Laravel Audit Log допоможе вам детально відстежувати всі зміни моделей Eloquent та відповідати вимогам регуляторів. Читайте далі, щоб дізнатися, як цей потужний інструмент може підвищити надійність вашого проєкту

Logomark Logotype

"SQLSTATE[HY000] [2002] Connection refused" у Laravel в GitHub Actions

Чи стикалися ви з помилкою «SQLSTATE[HY000] [2002] Connection refused» під час налаштування GitHub Actions для вашого додатку на Laravel? У нашій статті ми розглянемо три поширені причини цієї помилки та надамо рішення для їх усунення. Читайте далі, щоб дізнатися, як ваш CI/CD потік може працювати бездоганно!

Logomark Logotype

Як задокументувати кілька API в Laravel за допомогою Scramble

Ви знали, що в одному додатку Laravel можна реалізувати кілька API? У нашій статті ви дізнаєтеся, як за допомогою Scramble легко документувати різні версії API та налаштувати доступ до документації, щоб зробити її публічною або приватною. Читайте далі, щоб дізнатися більше