Route Model Binding là gì ? (phần 2)

Route Model Binding (tiếp tục)

Route Model Binding làm hành động controller và route callbacks của bạn sạch hơn và linh
động hơn. Nó cũng đơn giản hoá việc tìm thực thể khởi tạo model bạn cần cho các routes của
bạn.
Hãy cùng cung cấp các ví dụ cho cả gắn Route Model ngầm định và công khai.
Gắn ngầm định
Giả sử chúng ta có một blog với một Post model, và chúng ta muốn trình ra các posts riêng rẽ.
Chúng ta có thể định nghĩa một route giống cái này:

Route::get( ‘/posts/{post}’ , function (App\Models\Post
$post) {
return view( ‘post.show’ , [ ‘post’ => $post]);
});

Ở đây, {post} trong định nghĩa route là một cái giữ chỗ cho ID của post chúng ta muốn hiển thị.
Laravel sẽ tự động thay thế {post} với thực thể khởi tạo Post ID của nó khớp với giá trị {post}
trong URL. Nên, nếu bạn ghé thăm /post/1, Laravel sẽ bơm Post với ID là 1 vào route.
Gắn công khai
Bây giờ, giả sử chúng ta có một User model và chúng ta muốn gắn tham số route {profile} vào User
model dựa trên cột username. Trước tiên, chúng ta sẽ định nghĩa gắn này trong RouteServiceProvider:

public function boot ()
{
parent ::boot();
Route::model( ‘profile’ , App\Models\User::class,
function ($value) {
return App\Models\User::where( ‘username’ ,
$value)->firstOrFail();
});
}

Trong code này, chúng ta thông báo Laravel thay thế {profile} trong định nghĩa route với thực
thể khởi tạo User nơi cột username khớp với giá trị {profile} trong URL.
Sau đó, chúng ta có thể định nghĩa một route giống cái này:

Route::get( ‘/profiles/{profile}’ ,
function (App\Models\User $profile) {
return view( ‘profile.show’ , [ ‘profile’ =>
$profile]);
});

Ở đây, nếu bạn ghé thăm /profiles/johndoe, Laravel sẽ bơm User username của nó là ‘johndoe’ vào route.
Route model binding là một đặc tính mạnh mẽ cái có thể đơn giản hoá cực lớn các routes và controller của
bạn bằng cách giảm lượng truy vấn model thủ công bạn phải viết.

Chia sẻ

Leave a Reply

Your email address will not be published. Required fields are marked *