9. Chuyển hướng đến route được đặt tên (Redirecting to named route)(ok)

https://viblo.asia/p/tap-17-response-laravel-aWj534RGK6m

Khi bạn gọi method redirect mà không truyền tham số vào, một lớp khởi tạo Illuminate\Routing\Redirector sẽ được trả về. Do đó, ta có thể gọi bất kỳ method nào từ lớp Redirector đó. Chẳng hạn để redirect đến named route, bạn chỉ cần kết nối theo phương thức route.

return redirect()->route('name_route');

Ví dụ mình đăng ký hai route như sau:

Route::get('/', function() {
    return redirect()->route('home');
}); 

Route::get('/home', function() {
    return 'Home page';
})->name('home');

Như bạn thấy, khi mình truy cập route / thì sẽ redirect đến route có name là home.

Nếu URI route của bạn chứa tham số, bạn có thể truyền dữ liệu thông qua tham số thứ hai dưới dạng mảng. Chẳng hạn:

Route::get('/', function() {
    return redirect()->route('profile', ['id' => 1]);
}); 

Route::get('/profile/{id}', function($id) {
    return 'Profile '. $id;
})->name('profile');

Đây là kết quả khi truy cập đường dẫn http://localhost:8000:

Ngoài ra bạn cũng có thể truyền dữ liệu dưới dạng object model nếu bạn đang chuyển hướng đến URI có tham số dạng ID. Giá trị ID sẽ được xuất tự động

return redirect()->route('profile', [$user]);

Nếu bạn không muốn truyền giá trị ID theo mặc định, bạn có thể thay đổi bằng cách khai báo phương thức getRouteKey ở trong file model để thay đổi key ID mặc định.

public function getRouteKey()
{
    return $this->slug;
}

Hiện giờ do chúng ta chưa tìm hiểu về "Eloquent ORM" nên không thể test được, các bạn có thể tự kiểm chứng khi đã tìm hiểu vào các tập sau.

Last updated