6. Resource controller (ok)

https://viblo.asia/p/tap-14-controller-laravel-Ljy5VXOkZra

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:

/**
 * Display the specified resource.
 *
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function show($id)
{
    //
}

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:

Route::resource('posts', 'PostController');

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.

Route::resources([
    'photos' => 'PhotoController',
    'posts' => 'PostController'
]);

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:

/**
 * Display the specified resource.
 *
 * @param  \App\Photo  $photo
 * @return \Illuminate\Http\Response
 */
public function show(Photo $photo)
{
    //
}

Last updated