Bezpośrednia kontynuacja lekcji poprzedniej – poznajemy metody generowania URLów w Laravelu. Do dzieła.
Poprzednio napisaliśmy sobie coś takiego:
Route::get('/user/randomPage', function (Request $request) {
$random_id = random_int(1, 100);
$random_page = random_int(1,10);
$queryString = http_build_query([
'page' => $random_page,
]);
return redirect(route('userbyid', ['id' => $random_id])."?{$queryString}");
});
Route::get('/user/{id}', function (Request $request, string $id) {
$page = $request->query('page', '1');
return 'User '.$id . ' Page: ' . $page;
})->name('userbyid');
Prawda jest taka, że aż tak kombinować nie musimy:
Route::get('/user/randomPage', function (Request $request) {
$random_id = random_int(1, 100);
$random_page = random_int(1,10);
return redirect()->route('userbyid', ['id' => $random_id, 'page' => $random_page]);
});
Laravel jest na tyle mądry, aby odróżnić route param od query param. Przykład z dokumentacji:
echo route('post.show', ['post' => 1, 'search' => 'rocket']);
// http://example.com/post/1?search=rocket
Mamy też inne ciekawe metody gdy brakuje nam named routes:
echo url()->query('/posts', ['search' => 'Laravel']);
// https://example.com/posts?search=Laravel
echo url()->query('/posts?sort=latest', ['search' => 'Laravel']);
// http://example.com/posts?sort=latest&search=Laravel
Laravel potrafi nawet zamieniać query paramsy:
echo url()->query('/posts?sort=latest', ['sort' => 'oldest']);
// http://example.com/posts?sort=oldest
Kilka metod, które warto znać:
// Get the current URL without the query string...
echo url()->current();
// Get the current URL including the query string...
echo url()->full();
// Get the full URL for the previous request...
echo url()->previous();