Rate this post

Controller Laravel là một tính năng cần thiết trong một Laravel framework. Ban đầu, chúng tôi đang xử lý logic yêu cầu ở dạng đóng trong tệp tuyến; bây giờ, thay vì sử dụng các bao đóng trong các tệp định tuyến, chúng tôi sử dụng các lớp Controller. Controller được sử dụng để xử lý logic yêu cầu trong lớp đơn và Controller được định nghĩa trong thư mục “app / http / Controllers”. Framework Laravel tuân theo kiến ​​trúc MVC (Model View Controller) trong đó các Controller hoạt động như di chuyển lưu lượng qua lại giữa View và các model.

Các bài viết liên quan:

Khái niệm về Controller trong Laravel

Controller trong Laravel là một thành phần quan trọng trong kiến trúc MVC (Model-View-Controller) của framework Laravel. Nó đóng vai trò điều phối và xử lý các yêu cầu từ người dùng và trả về kết quả tương ứng. Controller được sử dụng để xử lý logic ứng dụng, truy cập và thao tác dữ liệu từ Model và sau đó truyền dữ liệu cho View để hiển thị kết quả cho người dùng.

Controller trong Laravel có các chức năng chính như sau:

  1. Xử lý yêu cầu từ người dùng: Controller nhận yêu cầu HTTP từ người dùng thông qua các route được định nghĩa trong tệp routes. Nó lắng nghe và xử lý các yêu cầu GET, POST, PUT, DELETE và các phương thức HTTP khác.
  2. Xử lý logic ứng dụng: Controller chứa các phương thức để thực hiện các tác vụ xử lý logic cụ thể của ứng dụng. Nó có thể gọi các phương thức từ Model để truy cập và thao tác dữ liệu.
  3. Chuẩn bị dữ liệu cho View: Controller truyền dữ liệu từ Model cho View để hiển thị kết quả cho người dùng. Nó có thể truyền dữ liệu thông qua các biến hoặc mảng và kết hợp chúng với template để tạo nội dung hiển thị.
  4. Điều hướng: Controller có khả năng điều hướng người dùng đến các trang và hành động khác trong ứng dụng. Nó có thể chuyển hướng người dùng sang các trang khác, thực hiện các hành động như tạo, sửa đổi hoặc xóa dữ liệu.

Controller trong Laravel giúp tách biệt logic ứng dụng, dữ liệu và giao diện người dùng. Nó giúp tạo ra mã nguồn dễ bảo trì, mở rộng và kiểm thử. Bằng cách sử dụng Controller, bạn có thể xây dựng ứng dụng web mạnh mẽ và linh hoạt trong Laravel.

Xem thêm controller trong Express.js

Tạo Controller trong Laravel

Để tạo một Controller trong Laravel, bạn có thể làm theo các bước sau:

Bước 1: Mở command line hoặc terminal và di chuyển đến thư mục gốc của ứng dụng Laravel của bạn.

Bước 2: Sử dụng Artisan command để tạo Controller mới. Gõ lệnh sau:

php artisan make:controller TenController

Trong đó, TenController là tên của Controller bạn muốn tạo. Ví dụ, nếu bạn muốn tạo một Controller tên là HomeController, bạn có thể gõ lệnh:

php artisan make:controller HomeController

Bước 3: Sau khi chạy lệnh trên, Laravel sẽ tạo một file Controller mới trong thư mục app/Http/Controllers. Bạn có thể mở file này và chỉnh sửa theo nhu cầu của bạn.

Bước 4: Trong Controller, bạn có thể định nghĩa các phương thức để xử lý các yêu cầu từ người dùng và thực hiện logic ứng dụng. Ví dụ, bạn có thể thêm một phương thức index() để hiển thị trang chủ của ứng dụng:

public function index()
{
    // Xử lý logic ứng dụng

    // Trả về view hiển thị
    return view('home');
}

Trong ví dụ trên, phương thức index() trả về một view có tên là 'home'. Bạn có thể tạo view tương ứng trong thư mục resources/views để hiển thị nội dung trang chủ.

Bước 5: Để sử dụng Controller trong các route, bạn cần định nghĩa route tương ứng trong tệp routes/web.php hoặc routes/api.php. Ví dụ, bạn có thể thêm một route để gọi phương thức index() của Controller HomeController:

Route::get('/', 'HomeController@index');

Trong ví dụ trên, route / sẽ gọi phương thức index() của Controller HomeController khi người dùng truy cập vào trang chủ.

Đó là cách tạo một Controller trong Laravel và sử dụng nó để xử lý các yêu cầu và logic ứng dụng. Bạn có thể tạo và tuỳ chỉnh các phương thức trong Controller để đáp ứng nhu cầu của ứng dụng của bạn.

Xem thêm Controller Resource Laravel

Routing và Controller trong Laravel

Trong Laravel, Routing và Controller là hai khái niệm quan trọng và tương quan mật thiết với nhau. Routing (định tuyến) xác định cách các yêu cầu HTTP được xử lý trong ứng dụng, trong khi Controller chịu trách nhiệm xử lý các yêu cầu đó và trả về kết quả tương ứng.

Dưới đây là một số thông tin về Routing và Controller trong Laravel:

  1. Routing (Định tuyến):
    • Laravel sử dụng cú pháp đơn giản và rõ ràng để định nghĩa các route. Các route được xác định trong các tệp routes/web.php hoặc routes/api.php.
    • Mỗi route định nghĩa một URI (Uniform Resource Identifier) và một hành động (action). URI là đường dẫn mà người dùng truy cập, và hành động xác định Controller và phương thức trong Controller được gọi để xử lý yêu cầu.
    • Laravel hỗ trợ các phương thức HTTP như GET, POST, PUT, DELETE và nhiều hơn nữa để xác định các loại yêu cầu khác nhau.
  2. Controller:
    • Controller trong Laravel là một lớp PHP được sử dụng để xử lý các yêu cầu từ người dùng và thực hiện các tác vụ logic của ứng dụng.
    • Mỗi Controller đóng vai trò như một trung tâm điều phối, chịu trách nhiệm xử lý các yêu cầu và tương tác với các thành phần khác của ứng dụng như Model và View.
    • Mỗi phương thức trong Controller đại diện cho một hành động cụ thể, như hiển thị trang, xử lý dữ liệu, truy xuất dữ liệu từ cơ sở dữ liệu, và trả về kết quả cho người dùng.
    • Controller có thể truyền dữ liệu từ Model cho View để hiển thị kết quả cho người dùng.
  3. Kết hợp Routing và Controller:
    • Khi một yêu cầu HTTP được gửi đến ứng dụng Laravel, nó sẽ được xử lý bởi hệ thống Routing.
    • Routing sẽ phân tích URI của yêu cầu và gọi phương thức tương ứng trong Controller đã được định nghĩa.
    • Controller sẽ nhận yêu cầu từ Routing và thực hiện các tác vụ logic cần thiết, như truy xuất dữ liệu, xử lý yêu cầu và trả về kết quả.
    • Controller có thể truyền dữ liệu cho View để hiển thị kết quả cuối cùng cho người dùng.

Kết hợp Routing và Controller giúp bạn tạo ra ứng dụng Laravel có cấu trúc rõ ràng và dễ bảo trì. Nó tách biệt logic ứng dụng, giao diện người dùng và cơ sở dữ liệu, giúp quản lý mã nguồn dễ dàng hơn và thúc đẩy tính mở rộng của ứng dụng.

Xem thêm Controller Middleware

Phương thức (Method) trong Controller trong Laravel

Trong Laravel, phương thức trong Controller đại diện cho các hành động cụ thể mà ứng dụng của bạn có thể thực hiện. Phương thức trong Controller được gọi khi một yêu cầu HTTP tương ứng được gửi đến ứng dụng.

Dưới đây là một số phương thức phổ biến trong Controller của Laravel:

  1. Phương thức index(): Phương thức index() được sử dụng để hiển thị danh sách các đối tượng hoặc tài nguyên. Ví dụ:
public function index()
{
    // Lấy danh sách các đối tượng từ cơ sở dữ liệu
    $objects = Object::all();

    // Trả về view hiển thị danh sách đối tượng
    return view('objects.index', compact('objects'));
}
  1. Phương thức create(): Phương thức create() được sử dụng để hiển thị form tạo mới đối tượng. Ví dụ:
public function create()
{
    // Trả về view hiển thị form tạo mới đối tượng
    return view('objects.create');
}
  1. Phương thức store(): Phương thức store() được sử dụng để xử lý yêu cầu gửi form tạo mới và lưu đối tượng vào cơ sở dữ liệu. Ví dụ:
public function store(Request $request)
{
    // Xử lý dữ liệu được gửi từ form tạo mới đối tượng
    $data = $request->validate([
        'name' => 'required',
        'email' => 'required|email',
    ]);

    // Lưu đối tượng vào cơ sở dữ liệu
    Object::create($data);

    // Chuyển hướng đến trang danh sách đối tượng
    return redirect()->route('objects.index');
}
  1. Phương thức show(): Phương thức show() được sử dụng để hiển thị thông tin chi tiết về một đối tượng cụ thể. Ví dụ:
public function show(Object $object)
{
    // Trả về view hiển thị thông tin chi tiết về đối tượng
    return view('objects.show', compact('object'));
}
  1. Phương thức edit(): Phương thức edit() được sử dụng để hiển thị form chỉnh sửa thông tin đối tượng. Ví dụ:
public function edit(Object $object)
{
    // Trả về view hiển thị form chỉnh sửa đối tượng
    return view('objects.edit', compact('object'));
}
  1. Phương thức update(): Phương thức update() được sử dụng để xử lý yêu cầu gửi form chỉnh sửa và cập nhật thông tin đối tượng vào cơ sở dữ liệu. Ví dụ:
public function update(Request $request, Object $object)
{
    // Xử lý dữ liệu được gửi từ form chỉnh sửa đối tượng
    $data = $request->validate([
        'name' => 'required',
        'email' => 'required|email',
    ]);

    // Cập nhật thông tin đối tượng trong cơ sở dữ liệu
    $object->update($data);

    // Chuyển hướng đến trang chi tiết đối tượng
    return redirect()->route('objects.show', $object);
}
  1. Phương thức destroy(): Phương thức destroy() được sử dụng để xóa đối tượng khỏi cơ sở dữ liệu. Ví dụ:
public function destroy(Object $object)
{
    // Xóa đối tượng khỏi cơ sở dữ liệu
    $object->delete();

    // Chuyển hướng đến trang danh sách đối tượng
    return redirect()->route('objects.index');
}

Đây chỉ là một số phương thức phổ biến trong Controller của Laravel. Bạn có thể tạo ra các phương thức khác tùy thuộc vào yêu cầu của ứng dụng của bạn.

Xem thêm AngularJS Controller

Middleware và Controller trong Laravel

Trong Laravel, Middleware và Controller là hai thành phần quan trọng trong quá trình xử lý yêu cầu HTTP. Middleware được sử dụng để áp dụng các bước xử lý trung gian trước khi yêu cầu được chuyển đến Controller để xử lý.

Dưới đây là giải thích về Middleware và cách nó kết hợp với Controller trong Laravel:

  1. Middleware:
    • Middleware là một lớp trung gian giữa yêu cầu vào và phản hồi từ ứng dụng.
    • Middleware được sử dụng để thực hiện các tác vụ như xác thực, kiểm tra quyền truy cập, xử lý dữ liệu, ghi log, và nhiều tác vụ trung gian khác trước khi yêu cầu được chuyển đến Controller.
    • Laravel đi kèm với một số Middleware mặc định và bạn cũng có thể tạo Middleware tùy chỉnh cho các nhu cầu cụ thể của ứng dụng của bạn.
  2. Controller:
    • Controller trong Laravel là thành phần chịu trách nhiệm xử lý các yêu cầu HTTP từ người dùng và thực hiện các tác vụ logic của ứng dụng.
    • Controller chứa các phương thức đại diện cho các hành động cụ thể như hiển thị trang, xử lý dữ liệu, truy vấn cơ sở dữ liệu, và trả về kết quả cho người dùng.
    • Các phương thức trong Controller được kích hoạt khi yêu cầu HTTP được định tuyến tới đúng route tương ứng.
  3. Kết hợp Middleware và Controller:
    • Middleware và Controller kết hợp để xử lý yêu cầu HTTP.
    • Trước khi yêu cầu được chuyển đến Controller, Middleware có thể được áp dụng để thực hiện các bước xử lý trung gian như xác thực người dùng, kiểm tra quyền truy cập, kiểm tra dữ liệu đầu vào, v.v.
    • Nếu Middleware xác nhận yêu cầu hợp lệ, yêu cầu được chuyển đến Controller để xử lý.
    • Controller sẽ tiếp nhận yêu cầu, thực hiện các tác vụ logic và trả về phản hồi tương ứng.

Ví dụ, bạn có thể định nghĩa một Middleware để kiểm tra xem người dùng đã xác thực hay chưa trước khi cho phép truy cập vào các tài nguyên như trang cài đặt cá nhân. Nếu yêu cầu không đáp ứng được Middleware, nó sẽ không được chuyển đến Controller và người dùng sẽ không có quyền truy cập.

Để sử dụng Middleware trong Laravel, bạn có thể định nghĩa và đăng ký Middleware trong file app/Http/Kernel.php, sau đó gán Middleware cho các route hoặc nhóm route tương ứng. Controller được định nghĩa trong thư mục app/Http/Controllers và được sử dụng để xử lý yêu cầu tương ứng với các phương thức trong nó.

Kết hợp Middleware và Controller giúp bạn quản lý quyền truy cập, xử lý dữ liệu trung gian và tách biệt logic ứng dụng trong quá trình xử lý yêu cầu HTTP trong Laravel.

Xem thêm AngularJS Scopes

Dependency Injection và Controller trong Laravel

Trong Laravel, Dependency Injection (DI) và Controller là hai khái niệm quan trọng và kết hợp nhau để quản lý sự phụ thuộc và xử lý yêu cầu trong ứng dụng.

  1. Dependency Injection (DI):
    • DI là một nguyên tắc thiết kế phần mềm giúp quản lý sự phụ thuộc giữa các thành phần trong ứng dụng.
    • DI cho phép chúng ta cung cấp các đối tượng hoặc các phụ thuộc khác vào một đối tượng khác để sử dụng.
    • Trong Laravel, DI được sử dụng rộng rãi và được tích hợp sẵn trong hệ thống container IoC (Inversion of Control).
    • DI giúp giảm sự ràng buộc giữa các lớp và tạo điều kiện cho việc kiểm thử và mở rộng dễ dàng hơn.
  2. Controller:
    • Trong Laravel, Controller là một thành phần chịu trách nhiệm xử lý yêu cầu HTTP và thực hiện các tác vụ logic trong ứng dụng.
    • Controller có thể sử dụng các phụ thuộc (dependencies) khác để thực hiện các tác vụ như truy vấn cơ sở dữ liệu, gửi email, xử lý hình ảnh, v.v.
    • DI được sử dụng để cung cấp các phụ thuộc này vào Controller, giúp làm giảm sự phụ thuộc chặt chẽ và tăng tính tái sử dụng của mã.
  3. Kết hợp Dependency Injection và Controller:
    • Trong Laravel, DI được sử dụng rộng rãi để cung cấp các phụ thuộc (dependencies) cho Controller.
    • Các phụ thuộc được khai báo trong hàm constructor của Controller và được Laravel tự động giải quyết thông qua container IoC.
    • Bằng cách sử dụng DI, các phụ thuộc được cung cấp vào Controller một cách tự động, giúp tách biệt logic và dễ dàng thay thế hoặc mở rộng các phụ thuộc khi cần thiết.

Ví dụ, bạn có thể sử dụng DI để cung cấp một instance của UserRepository vào UserController để thực hiện các tác vụ liên quan đến người dùng, như lấy danh sách người dùng, lưu người dùng mới, cập nhật thông tin người dùng, v.v. DI sẽ giúp giảm sự phụ thuộc trực tiếp của Controller vào UserRepository và làm cho Controller trở nên dễ dàng kiểm thử và mở rộng.

Test và Debug Controller trong Laravel

Để test và debug Controller trong Laravel, bạn có thể sử dụng các công cụ và phương pháp sau đây:

  1. Unit Testing:
    • Laravel cung cấp một bộ công cụ mạnh mẽ để thực hiện Unit Testing cho ứng dụng.
    • Bạn có thể viết các test case để kiểm tra tính đúng đắn của các phương thức trong Controller.
    • Sử dụng các hàm như assertResponseStatus(), assertViewHas(), assertRedirectedToRoute() để kiểm tra kết quả trả về từ Controller.
  2. Feature Testing:
    • Feature Testing trong Laravel cho phép bạn thực hiện các kiểm tra trên toàn bộ quá trình xử lý yêu cầu HTTP từ giao diện người dùng.
    • Bạn có thể thực hiện các kiểm tra trên route, gửi yêu cầu HTTP và kiểm tra kết quả từ Controller.
    • Sử dụng các hàm như visit(), see(), dontSee(), assertRedirectedToRoute() để kiểm tra các thành phần của ứng dụng.
  3. Logging:
    • Sử dụng chức năng logging trong Laravel để ghi lại thông tin và lỗi từ Controller.
    • Bạn có thể sử dụng hàm Log::info(), Log::debug(), Log::error() để ghi log các thông tin quan trọng hoặc các lỗi xảy ra trong Controller.
    • Các thông tin log sẽ được ghi vào các tệp log của ứng dụng, giúp bạn theo dõi và xác định vấn đề.
  4. Debugging Tools:
    • Laravel cung cấp các công cụ giúp bạn debug Controller như dd(), dump(), dd() để in ra thông tin và giá trị của các biến và đối tượng trong Controller.
    • Sử dụng các công cụ như Xdebug, Laravel Debugbar, Laravel Telescope để giúp theo dõi quá trình xử lý yêu cầu và xem chi tiết về thông tin gỡ lỗi.
  5. Xem Log và Exception:
    • Laravel cung cấp các tệp log và ghi lại các Exception xảy ra trong ứng dụng.
    • Kiểm tra các tệp log để xem thông tin chi tiết về quá trình xử lý yêu cầu và các lỗi có thể xảy ra trong Controller.
    • Các thông báo lỗi và exception sẽ được hiển thị trên màn hình hoặc ghi lại trong tệp log.
  6. Thử nghiệm bằng tay (Manual Testing):
    • Bạn có thể thử nghiệm bằng tay bằng cách gửi yêu cầu HTTP trực tiếp đến các route và kiểm tra kết quả trả về từ Controller.
    • Sử dụng các công cụ như Postman, cURL hoặc trình duyệt để gửi yêu cầu và kiểm tra phản hồi từ Controller.

Bằng cách sử dụng các công cụ và phương pháp trên, bạn có thể test và debug Controller trong Laravel để đảm bảo tính đúng đắn và xử lý đúng các yêu cầu của ứng dụng.

Ví dụ:

Tệp mặc định của Controller có sẵn trong thư mục app / http / Controllers.

Trong đoạn mã trên, không gian tên được sử dụng vì nó cho phép bạn sử dụng các tên và lớp hàm giống nhau trong các phần khác nhau của cùng một ứng dụng. Ví dụ,

Giả sử chúng ta phải chạy hàm có tên, tức là RunQuery (). Chúng có sẵn trong các thư mục khác nhau functions1 và functions2, vì vậy chúng ta có thể nói rằng không gian tên tránh được xung đột giữa các tên hàm giống nhau.

‘use’ được sử dụng để nhập lớp vào tệp hiện tại.

Hãy xem cách tạo Controller thông qua Git Bash Window.

Bước 1: Mở Git Bash Window và gõ lệnh “php artistan make: Controller PostsController” vào Git Bash Window để tạo Controller.

Màn hình trên cho thấy rằng Controller có tên là PostsController đã được tạo thành công.

Bước 2: Bây giờ chuyển sang dự án của bạn và xem tệp PostsController đã được tạo hay chưa. Đường dẫn của tệp là:

C:\xampp\htdocs\laravelproject\app \ Http \ Controllers

Màn hình trên cho thấy rằng tệp PostsController đã được tạo.

Mã mặc định của tệp PostsController.php được cung cấp dưới đây:

Đoạn mã trên chứa lớp mở rộng lớp Controller, nhưng lớp này không chứa các chức năng như tạo, cập nhật hoặc xóa. Bây giờ chúng ta sẽ xem cách tạo Controller có chứa một số chức năng mặc định.

Để tạo Controller, trước tiên chúng ta sẽ xóa PostsController.php khỏi dự án, mà chúng ta đã tạo ở bước trước.

Gõ lệnh:

php Artian make: controller -resource PostController, lệnh này được sử dụng để tạo Controller.

Bây giờ, hãy chuyển sang dự án của bạn để xem liệu tệp PostController đã được tạo hay chưa. Đường dẫn của tệp sẽ là:

C: \ xampp \ htdocs \ laravelproject \ app \ Http \ Controllers

Màn hình trên cho thấy rằng tệp PostController đã được tạo thành công.

Mã mặc định của tệp PostController.php được cung cấp bên dưới:

Đoạn mã trên chứa các hàm được sử dụng để thực hiện các hoạt động khác nhau trên các tài nguyên như:

create(): Nó được sử dụng để tạo một tài nguyên mới.

store(): Nó được sử dụng để lưu trữ tài nguyên được chỉ định.

update(): Nó được sử dụng để cập nhật tài nguyên được chỉ định trong bộ nhớ.

destroy(): Nó được sử dụng để xóa các tài nguyên được chỉ định khỏi bộ nhớ.

Controller Route

Controller Route cho phép bạn tạo các lớp Controller với các phương thức được sử dụng để xử lý các yêu cầu.

Bây giờ, chúng ta sẽ hiểu các Controller Route thông qua một ví dụ.

Bước 1: Đầu tiên, chúng ta cần tạo một Controller. Chúng tôi đã tạo Controller có tên là ‘PostController’ trong chủ đề trước.

Bước 2: Mở tệp web.php và viết mã sau:

Trong đoạn mã trên, ‘/ post’ là URL mà chúng tôi muốn truy cập và PostController là tên của Controller. ‘Index’ là tên của phương thức có sẵn trong tệp PostController.php và @index chỉ ra rằng phương thức index () sẽ được nhấn khi chúng ta truy cập url ‘/ post’.

Bước 3: Thêm mã được hiển thị bên dưới:

Bước 4: Nhập URL vào trình duyệt, tức là localhost / laravelproject / public / host

Cho đến bây giờ, chúng tôi đã quan sát cách chúng tôi có thể truy cập Controller. Bây giờ, chúng ta sẽ thấy rằng làm thế nào để truyền dữ liệu đến lớp Controller.

Truyền dữ liệu đến Controller

Chúng ta hãy hiểu qua một ví dụ về cách chúng ta có thể truyền dữ liệu đến Controller:

Bước 1: Mở tệp web.php và thêm mã sau:

Đoạn mã trên chứa tham số ‘id’ trong url ‘/ post’.

Bước 2: Chỉnh sửa tệp PostController.php.

Trong trường hợp trên, chúng tôi đã cập nhật phương thức index (). Chúng tôi đã chuyển tham số ‘id’ vào phương thức index ().

Bước 3: Nhập URL ‘localhost / laravelproject / post / 100’ vào trình duyệt web, sau đó kết quả sẽ được hiển thị như sau:

Controller và Không gian tên

Khi chúng ta chỉ định lớp Controller trong phương thức Route :: get (), thì chúng ta không cần chỉ định vùng tên Controller đầy đủ. Khi RouteServiceProvider tải tất cả các tệp Route có chứa vùng tên, chúng ta chỉ cần chỉ định tên lớp đứng sau phần App / Http / Controllers của vùng tên.

Nếu lớp Controller đầy đủ là App / Http / Controllers / Post / PostController, thì chúng ta có thể đăng ký các tuyến của Controller như dưới đây:

Controller hành động đơn

Nếu chúng ta muốn sử dụng một phương thức duy nhất trong một Controller, thì chúng ta có thể sử dụng một phương thức __invoke () trên Controller.

Khi chúng ta tạo Controller bằng cách sử dụng lệnh php artist: make controller PostController thì cấu trúc của tệp PostController sẽ là:

Bây giờ, chúng ta thêm mã của hàm __invoke () trong một lớp PostController:

Cuối cùng, chúng tôi thêm mã vào tệp web.php, tệp này chịu trách nhiệm xử lý các hành động.

Đoạn mã trên truy cập vào phương thức __invoke () của một lớp PostController. Điều này kết luận rằng chúng ta không cần phải viết phương thức @invoke để truy cập các Controller hành động đơn lẻ.

Đầu ra

Khi chúng tôi nhập URL ‘localhost / laravelproject / public / post / 67’, thì kết quả đầu ra sẽ là:

Nếu không có hành động nào được chỉ định, tức là chúng ta quên viết phương thức __invoke (), thì biểu thức bất ngờ sẽ được ném ra.

Giả sử chúng ta xóa phương thức __invoke () khỏi lớp PostController thì kết quả đầu ra sẽ là:

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now