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