Основні хелпери:
url('/posts/42'); // абсолютний URL з APP_URL чи поточного хоста
route('posts.show', $post); // за іменем маршруту - рекомендований спосіб
route('posts.show', ['post' => $post, 'tab' => 'comments']); // зайві параметри стають query
route('posts.index', absolute: false); // відносний шлях /posts
action([PostController::class, 'show'], $post);
secure_url('/checkout'); // примусово https
Чому route(), а не рядки: змінили URL у файлі маршрутів - усі посилання оновилися. Помилка в імені маршруту - виняток одразу, а не тихе посилання в нікуди.
Модель як параметр: Laravel підставляє ключ маршруту моделі (getRouteKey()), тож якщо маршрут використовує {post:slug} чи модель перевизначає getRouteKeyName(), у URL буде slug.
Поточна й попередня адреса:
url()->current(); // без query
url()->full(); // з query
url()->previous(); // з заголовка Referer чи сесії
url()->previousPath();
request()->routeIs('posts.*'); // для активних пунктів меню
Змінити параметри поточної адреси (наприклад, сторінку чи сортування) зручніше не склеюванням рядків, а через $request->fullUrlWithQuery(['page' => 3]) чи об'єкт Uri.
Типові проблеми:
- неправильний домен чи
httpзамістьhttpsза балансувальником - не налаштовані довірені проксі, і Laravel не знає, що запит прийшов по HTTPS; - URL у листах і завданнях черги будуються з
APP_URL, бо поточного запиту немає. НеправильнийAPP_URL- посилання наlocalhostу листах; url()->previous()для логіки безпеки - заголовокRefererконтролює клієнт;- підписані URL (
URL::signedRoute) - для посилань, які не можна підробити: відписка, підтвердження пошти.