Tạo Controller và Các Phương Thức (Actions) trong CakePHP
Trong CakePHP, Controller là nơi xử lý các yêu cầu từ người dùng và quyết định những hành động nào sẽ được thực hiện, như truy xuất dữ liệu từ cơ sở dữ liệu, xử lý form, hoặc trả về các phản hồi cho người dùng. Các phương thức trong Controller (còn gọi là Actions) thường được liên kết với các hành động cụ thể mà người dùng yêu cầu thông qua các URL.

1. Tạo Controller trong CakePHP
Để tạo một controller trong CakePHP, bạn cần tạo một lớp PHP trong thư mục src/Controller
. Các controller này phải kế thừa từ lớp AppController
, là lớp cơ sở cho tất cả các controller trong CakePHP.
Cách Tạo Controller Mới
Ví dụ, bạn muốn tạo một controller cho bảng Articles
. Bạn có thể tạo một controller có tên là ArticlesController
trong thư mục src/Controller
.
src/Controller/ArticlesController.php
Trong controller này, bạn sẽ thêm các phương thức (actions) để xử lý các yêu cầu khác nhau. Ví dụ, để hiển thị danh sách các bài viết, bạn có thể tạo một action gọi là index
.
// src/Controller/ArticlesController.php
namespace App\Controller;
use App\Controller\AppController;
class ArticlesController extends AppController
{
// Phương thức hiển thị danh sách bài viết
public function index()
{
$articles = $this->Articles->find('all'); // Lấy tất cả bài viết
$this->set(compact('articles')); // Truyền dữ liệu sang view
}
// Phương thức hiển thị chi tiết bài viết
public function view($id = null)
{
$article = $this->Articles->get($id); // Lấy bài viết theo ID
$this->set(compact('article')); // Truyền dữ liệu sang view
}
// Phương thức thêm bài viết mới
public function add()
{
$article = $this->Articles->newEmptyEntity();
if ($this->request->is('post')) {
$article = $this->Articles->patchEntity($article, $this->request->getData()); // Gắn dữ liệu từ form vào model
if ($this->Articles->save($article)) {
$this->Flash->success(__('Bài viết đã được lưu.'));
return $this->redirect(['action' => 'index']);
}
$this->Flash->error(__('Không thể lưu bài viết.'));
}
$this->set(compact('article'));
}
}
Trong ví dụ trên, ArticlesController
có ba phương thức:
- index(): Lấy tất cả bài viết và hiển thị chúng trên trang danh sách.
- view($id): Hiển thị chi tiết một bài viết dựa trên ID.
- add(): Thêm một bài viết mới thông qua form.
2. Các Phương Thức (Actions) trong Controller
Mỗi phương thức trong controller tương ứng với một hành động hoặc một yêu cầu HTTP cụ thể. Phương thức này sẽ xử lý logic của ứng dụng và trả về dữ liệu cho người dùng.
Các Phương Thức Thường Dùng
- index(): Thường dùng để hiển thị danh sách các bản ghi trong cơ sở dữ liệu.
- view($id): Thường dùng để hiển thị chi tiết của một bản ghi cụ thể.
- add(): Thường dùng để xử lý các yêu cầu thêm bản ghi mới vào cơ sở dữ liệu.
- edit($id): Thường dùng để xử lý các yêu cầu chỉnh sửa thông tin của một bản ghi.
- delete($id): Thường dùng để xử lý các yêu cầu xóa bản ghi khỏi cơ sở dữ liệu.
Ví dụ, bạn có thể thêm phương thức edit()
để chỉnh sửa bài viết trong controller:
public function edit($id = null)
{
$article = $this->Articles->get($id); // Lấy bài viết theo ID
if ($this->request->is(['post', 'put'])) {
$article = $this->Articles->patchEntity($article, $this->request->getData()); // Cập nhật dữ liệu vào model
if ($this->Articles->save($article)) {
$this->Flash->success(__('Bài viết đã được cập nhật.'));
return $this->redirect(['action' => 'index']);
}
$this->Flash->error(__('Không thể cập nhật bài viết.'));
}
$this->set(compact('article'));
}
Action delete()
Phương thức delete()
xử lý yêu cầu xóa bài viết:
public function delete($id = null)
{
$this->request->allowMethod(['post', 'delete']); // Chỉ chấp nhận phương thức POST và DELETE
$article = $this->Articles->get($id); // Lấy bài viết theo ID
if ($this->Articles->delete($article)) {
$this->Flash->success(__('Bài viết đã được xóa.'));
} else {
$this->Flash->error(__('Không thể xóa bài viết.'));
}
return $this->redirect(['action' => 'index']);
}
3. URL và Phương Thức trong Controller
Khi người dùng gửi yêu cầu đến một URL, CakePHP sẽ tìm phương thức tương ứng trong controller và thực thi nó. URL mặc định sẽ theo cú pháp controller/action/parameters
, ví dụ:
http://localhost/articles/index
http://localhost/articles/view/1
http://localhost/articles/add
-
/articles/index
: Gọi phương thứcindex()
trongArticlesController
. -
/articles/view/1
: Gọi phương thứcview(1)
trongArticlesController
để hiển thị chi tiết bài viết với ID = 1. -
/articles/add
: Gọi phương thứcadd()
trongArticlesController
để thêm bài viết mới.
CakePHP cũng hỗ trợ routing để bạn có thể tùy chỉnh URL theo ý muốn. Bạn có thể định nghĩa các route trong file config/routes.php
.
4. Tùy Chỉnh URL với Routing
Nếu bạn muốn thay đổi URL mặc định hoặc tạo ra các route động, bạn có thể sử dụng phương thức Router::connect()
trong file config/routes.php
.
Ví dụ, để tạo route tùy chỉnh cho view
:
// config/routes.php
$routes->connect('/article/:id', ['controller' => 'Articles', 'action' => 'view']);
Trong trường hợp này, bạn có thể truy cập bài viết thông qua URL như http://localhost/article/1
thay vì http://localhost/articles/view/1
.
Kết Luận
CakePHP cung cấp một cơ chế rất dễ dàng để tạo controller và xử lý các phương thức (actions). Bạn chỉ cần tạo các phương thức tương ứng với các yêu cầu HTTP và định nghĩa logic trong đó. Các phương thức này sẽ làm việc với dữ liệu từ các model và trả về các phản hồi thích hợp cho người dùng. CakePHP cũng hỗ trợ routing mạnh mẽ để bạn có thể tùy chỉnh các URL theo nhu cầu của mình.
Với hệ thống controller và actions của CakePHP, bạn có thể dễ dàng xây dựng ứng dụng web có cấu trúc rõ ràng và dễ duy trì.

Với hơn 10 năm kinh nghiệm lập trình web và từng làm việc với nhiều framework, ngôn ngữ như PHP, JavaScript, React, jQuery, CSS, HTML, CakePHP, Laravel..., tôi hy vọng những kiến thức được chia sẻ tại đây sẽ hữu ích và thiết thực cho các bạn.
Xem thêm

Chào, tôi là Vũ. Đây là blog hướng dẫn lập trình của tôi.
Liên hệ công việc qua email dưới đây.
lhvuctu@gmail.com