Wykonujemy ciekawe ćwiczenie z przekierowaniem, które ma nas czegoś nauczyć. Kontynuacja lekcji poprzednich. Do dzieła.

Ok, poprzednio napisaliśmy sobie coś takiego:

Route::get('/user/{id}', function (Request $request, string $id) {
    $page = $request->query('page', '1');
    return 'User '.$id . ' Page: ' . $page;
})->name('userbyid');

Dodałem name, bo będzie potrzebne. Teraz nad (nie pod) tym kodem dodajemy takie coś:

Route::get('/user/random', function (Request $request) {
    $random_id = random_int(1, 100);
    return redirect()->route('userbyid', ['id' => $random_id]);
});

To nas przekieruje na route z losowym parametrem id. Warto to znać.

A query params (url params)? Tutaj trzeba trochę pokombinować. Zobaczmy:

Route::get('/user/randomPage', function (Request $request) {
    $random_id = random_int(1, 100);
    return redirect(route('userbyid', ['id' => $random_id])."?page=2");
});

//http://127.0.0.1:8000/user/52?page=2

Przekierowuje dobrze. Trzeba teraz to wszystko ogarnąć:

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}");
});

Dla chcącego nic trudnego. Podaję jeszcze z dokumentacji ciekawsze fragmenty dotyczące przekierowań. Na inną stronę:

return redirect()->away('https://www.google.com');

Do akcji kontrolera:

use App\Http\Controllers\UserController;
 
return redirect()->action([UserController::class, 'index']);

Do akcji razem z route paramsem:

return redirect()->action(
    [UserController::class, 'profile'], ['id' => 1]
);