Налаштуйте обробку URL за допомогою макросного класу URI в Laravel

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 14 травня, 2025
Досліджуйте, як Laravel вдосконалює обробку URL завдяки додаванню trait Macroable до класу URI, що дозволяє розробникам створювати кастомні методи для зручнішої роботи з URL. Читайте далі, щоб дізнатися, як ця гнучка функціональність може суттєво спростити ваше програмування
```html

Laravel покращує маніпуляції з URL завдяки додаванню трейту Macroable до класу URI, що дозволяє розробникам створювати власні методи обробки URL, які гармонійно інтегруються з елегантним синтаксисом фреймворку.

Клас Illuminate\Support\Uri забезпечує чистий, об'єктно-орієнтований підхід до роботи з URL. Він дозволяє розробникам аналізувати, маніпулювати та створювати URL без використання вбудованих функцій PHP або операцій з рядками:

use Illuminate\Support\Uri;

$uri = new Uri('https://laravel.com/docs/10.x');
echo $uri->getHost(); // laravel.com
echo $uri->getPath(); // /docs/10.x

Із впровадженням трейту Macroable цей потужний API стає ще більш гнучким і налаштовуваним.

Трейт Macroable представляє шаблон, поширений у Laravel, що дозволяє додавати кастомні методи до існуючих класів під час виконання. Це забезпечує чистий підхід до розширення функціональності без зміни вихідного коду чи створення складних ієрархій.

Створення макросу для URI є простим:

use Illuminate\Support\Uri;

Uri::macro('docs', fn () => $this->withPath('docs'));

$uri = new Uri('https://laravel.com/');
$docsUri = $uri->docs(); // https://laravel.com/docs

Цей макрос додає метод docs() до всіх екземплярів URI, що змінює шлях на "docs" у зрозумілій та інтуїтивно зрозумілій формі, схожій на рідний метод.

У практичному застосуванні ви можете генерувати різні типи URL для платформи електронної комерції:

use Illuminate\Support\Uri;

// Реєстрація макросів у сервіс-провайдері
class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        // Додати шлях категорії до URL продукту
        Uri::macro('inCategory', function ($category) {
            return $this->withPath('shop/' . $category . '/' . trim($this->getPath(), '/'));
        });

        // Конвертувати в мобільну версію
        Uri::macro('mobile', function () {
            $path = trim($this->getPath(), '/');
            return $this->withHost('m.' . $this->getHost())
                        ->withPath($path);
        });

        // Створити URL для відстеження
        Uri::macro('tracking', function ($campaign) {
            return $this->withQueryParameter('utm_campaign', $campaign)
                        ->withQueryParameter('utm_source', 'website');
        });
    }
}

// Використання у вашій програмі
$baseUri = new Uri('https://shopexample.com/products/winter-jacket');

// https://shopexample.com/shop/clothing/products/winter-jacket
$categoryUri = $baseUri->inCategory('clothing');

// https://m.shopexample.com/products/winter-jacket
$mobileUri = $baseUri->mobile();

// https://shopexample.com/products/winter-jacket?utm_campaign=winter-sale&utm_source=website
$trackingUri = $baseUri->tracking('winter-sale');

Цей підхід створює доменну специфічну мову для маніпуляції URL, яка ідеально адаптується до конкретних вимог вашого додатку.

```