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();