Todo list: Khái niệm Laravel Controller

Bài viết được sự cho phép của tác giả Kien Dang Chung

Video trong bài viết

Trong bài trước chúng ta đã sơ lược về mô hình MVC, bạn cũng đã được làm quen với Route và View. Trong bài hôm nay, bạn hãy cùng tôi tìm hiểu về Controller, vậy Laravel Controller có phải là Controller trong mô hình MVC, nó được sử dụng cho mục đích gì?.

Mô hình MVC

Laravel Controller

Chúng ta cùng xem định nghĩa Laravel Controller trên tài liệu chính thức của Laravel: Thay vì định nghĩa tất cả các đoạn xử lý logic nghiệp cho yêu cầu trong các file route dưới dạng Closure, chúng ta sẽ tổ chức nó vào các class Controller. Controller giúp nhóm các logic nghiệp vụ cho yêu cầu liên quan vào trong một class. Controller được lưu trong thư mục app/Http/Controllers. Như vậy chúng ta có thể thấy Laravel Controller mang dáng dấp của Controller trong MVC, tuy nhiên nó được phân lớp nhiều hơn, giúp xây dựng ứng dụng tốt hơn.

Khá rối rắm đúng không, bạn không cần quan tâm sâu bên trong, chỉ cần nhớ Controller trong Laravel là các class PHP nằm trong thư mục app/Http/Controllers, về chức năng chúng ta sẽ tìm hiểu dưới đây. Các controller này có thể tạo ra thủ công bằng cách tạo file hoặc thông qua câu lệnh artisan:

php artisan make:controller AboutController --resource

Ở đây, AboutController là tên controller, tham số –resource là tùy chọn, tham số này sẽ tạo ra controller với đầy đủ các phương thức cần thiết như index, create, store, update…

  Bộ cài đặt Laravel Installer đã hỗ trợ tích hợp Jetstream
  Cách sử dụng Laravel với Socket.IO

Xem thêm tuyển dụng Laravel nhiều vị trí trên TopDev

Một chú ý nữa là các file controller được tạo ra này sẽ có namespace theo đường dẫn thư mục đến controller. Ví dụ đường dẫn thư mục là app->Http->Controllers thì namespace ở đây sẽ là:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class AboutController extends Controller
{

}

Nhờ đó, Composer với autoloading có thể tải chính xác class này ngay khi bạn tạo ra nó. Chúng ta sẽ tìm hiểu về cách sử dụng của Controller.

Bạn có nhớ chúng ta đã khai báo đường dẫn about trong routes/web.php trong bài trước:

Route::get('about', function () {
    return view('about');
});

Tham số thứ hai của phương thức get() có thể là một function ở dạng Closure, ngoài ra nó có thể là một chuỗi bao gồm tên của controller và tên của phương thức trong controller cách nhau bởi ký tự @:

Route::get('about', 'AboutController@index');

Nếu bạn thực hiện luôn sẽ gặp lỗi “Method index doesn’t exist”, do phương thức index không tồn tại trong AboutController. Thêm phương thức index vào:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class AboutController extends Controller
{
    public function index()
    {
      return view('about');
    }
}

Quay lại trang http://localhost:8000/about mọi thứ hoạt động bình thường giống như khi chúng ta sử dụng kiểu Closure.

Trong phương thức của controller chúng ta có thể thực hiện rất nhiều công việc như gọi đến một api ở ngoài, thực hiện truy vấn cơ sở dữ liệu hoặc trả về một view như ví dụ ở trên.

Diễn giải một chút về hoạt động của ứng dụng:

  1. Người dùng vào đường dẫn http://localhost:8000/about
  2. Hệ thống kiểm tra trong routes/web.php xem đã định nghĩa chưa, nếu chưa trả về lỗi 404 không tìm thấy yêu cầu, nếu đã định nghĩa thực hiện tiếp nội dung trong tham số thứ 2 có thể là function dạng Closure hoặc chuỗi tên controller và phương thức trong đó, ở đây là ‘AboutController@index’.
  3. AboutController sẽ được tải lên và thực thi phương thức index().
  4. Phương thức index() trả về View about.blade.php tạo ra ở bài trước.
  5. Laravel Blade sẽ xử lý nội dung file blade và trả về người dùng nội dung thuần HTML.

Tóm tắt

Như vậy, sau bài học hôm nay bạn chỉ cần nắm được:

  • Laravel Controller là class PHP nằm trong app->Http->Controllers.
  • Nó có thể tạo thủ công hoặc bằng công cụ artisan.
  • Khi xử lý Route, có thể truyền vào một function hoặc một Controller.
  • Trong phương thức của controller có thể thực hiện bất cứ công việc nào có liên quan đến việc cuối cùng là trả về View.

Code: Bài 3 – Laravel Controller

Các bước thực hiện để chạy code giống 2 bài học trước.

Bài viết gốc được đăng tải tại allaravel.com

Có thể bạn quan tâm:

Xem thêm tuyển dụng CNTT hấp dẫn trên TopDev