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, яка ідеально адаптується до конкретних вимог вашого додатку.
```