Khai báo
Tiếp theo bạn khai báo route cho controller
Route::resource('photos', 'PhotoController');
Chỉ với 1 dòng khai báo như này, là bạn đã khai báo cho tất cả các action trong PhotoController. Bạn cũng có thể khai báo cho nhiều resource controller cùng 1 lúc bằng cách truyền vào 1 mảng cho phương thức resouce:
Route::resources([
'photos' => 'PhotoController',
'posts' => 'PostController'
]);
Các action được xử lý bởi resource controller:
Phương thức | URI | Hành động | Tên route |
---|---|---|---|
GET | /photos |
index | photos.index |
GET | /photos/create |
create | photos.create |
POST | /photos |
store | photos.store |
GET | /photos/{photo} |
show | photos.show |
GET | /photos/{photo}/edit |
edit | photos.edit |
PUT/PATCH | /photos/{photo} |
update | photos.update |
DELETE | /photos/{photo} |
destroy | photos.destroy |
Cách giả method
Ví trong html không có các method PUT, PATCH, DELETE nên bạn sẽ cần dùng lệnh @method
để có thể gán các method này vào cho bạn.
<form action="/foo/bar" method="POST">
@method('PUT')
</form>
Partial Resource Routes
Khi khai báo resource route như ban đầu mình hướng dẫn, hệ thống sẽ mặc định sẽ xử lý toàn bộ các action trong đó. Tuy nhiên, nếu bạn chỉ muốn dùng 1 số action nhất định trong đó, bạn có thể khai báo như sau:
Route::resource('photos', 'PhotoController')->only([
'index', 'show'
]);
hoặc
Route::resource('photos', 'PhotoController')->except([
'create', 'store', 'update', 'destroy'
]);
Hàm only()
sẽ chỉ sử dụng các action trong mảng bạn truyền vào, còn hàm except()
sẽ sử dụng tất cả ngoại trừ các action trong mảng truyền vào.
Ghi đè name routes
Mặc định tất cả các route trong resource controller sẽ có tên như trong bảng bên trên. Tuy nhiên bạn có thể ghi đè tên route bằng cách sau đây:
Route::resource('photos', 'PhotoController')->names([
'create' => 'photos.build'
]);
Kết luận
Vâỵ là mình đã giới thiệu xong cho các bạn về Resource controller trong laravel. Nếu có thắc mắc hay ý kiến gì các bạn có thể comment bên dưới để mình hoàn thiện bài viết hơn.