6. Resource controller (ok)
https://viblo.asia/p/tap-14-controller-laravel-Ljy5VXOkZra
Last updated
https://viblo.asia/p/tap-14-controller-laravel-Ljy5VXOkZra
Last updated
Nếu trong ứng dụng bạn có nhiều resource controller, bạn có thể đăng ký route với dạng mảng.
Resource controller được sử dụng khi bạn muốn thực thi CRUD với một tài nguyên nào đó, chẳng hạn như bài viết, chuyên mục, thư viện ảnh... Bạn không cần phải cất công khai báo từng route thêm, sửa, xóa... Hay là tạo controller xử lý, định nghĩa khung cho các method. Bởi các điều đó đã được resource controller lo hết.
Chẳng hạn giờ mình muốn tạo một resource controller để thao tác với tài nguyên bài viết của ứng dụng. Đầu tiên, ta sẽ chạy lệnh Artisan sau để khởi tạo một resource controller:
php artisan make:controller PostController --resource
Với lệnh này, framework sẽ khởi tạo controller App\Http\Controllers\PostController
cho chúng ta, nhưng điều đặc biệt là đã được viết sẵn khung các method cần thiết để thực thi CRUD. Các bạn có thể mở controller PostController
lên để kiểm chứng, chẳng hạn ta có method show
:
Việc tiếp theo ta chỉ cần khai báo route cho resource controller vừa tạo. Bạn gõ cú pháp sau:
Ta sử dụng method Route::resource
để đăng ký resource controller. Trong đó:
Tham số thứ hai sẽ là tên resource controller dưới dạng Namespace/NameResourceController
.
Lưu ý: Tên tài nguyên nên đặt ở dạng số nhiều, chẳng hạn như
posts
,photos
...
Hiện tại ta chưa học về các bài liên quan đến database nên ở tập này ta chỉ nói khái quát về các method trong resource controller thôi, chưa thể test chi tiết được.
Nếu trong ứng dụng bạn có nhiều resource controller, bạn có thể đăng ký route với dạng mảng.
Khi làm việc với resource controller, có thể ta sẽ cần đến model để tương tác với database. Chính vì vậy, Laravel cung cấp một lệnh Artisan giúp ta vừa tạo resource controller, vừa tạo luôn model cho nó.
php artisan make:controller PhotoController --resource --model=Photo
Nếu tạo resource controller có kèm model thế này thì trong các method có chứa $id
của PhotoController
sẽ được inject dependency model Photo
. Chẳng hạn method show
:
Tham số thứ nhất sẽ là tên tài nguyên, đồng thời cũng là prefix của các resource route. Ta sẽ có các resource route mặc định sau: