Tuỳ chỉnh code sau khi sử dụng Bake trong CakePHP
Tuỳ chỉnh code sau khi sử dụng Bake trong CakePHP
Sau khi sử dụng lệnh Bake
để tự động tạo các thành phần như Model, Controller và View, bạn có thể thực hiện một số tuỳ chỉnh để phù hợp hơn với yêu cầu của dự án.

1. Tuỳ chỉnh Model
Model bao gồm hai thành phần chính:
- Table class: Định nghĩa các quy tắc, quan hệ, và các logic liên quan đến bảng.
- Entity class: Xử lý dữ liệu của một bản ghi (record).
1.1. Tuỳ chỉnh Table
class
File: src/Model/Table/<TênBảng>Table.php
Ví dụ, sau khi tạo bằng lệnh:
bin/cake bake model lessons
Sẽ tạo file LessonsTable.php
. Bạn có thể tuỳ chỉnh như sau:
- Thêm quy tắc xác thực (Validation):
public function validationDefault(Validator $validator): Validator
{
$validator
->notEmptyString('title', 'Title cannot be empty')
->maxLength('title', 255, 'Title must not exceed 255 characters')
->allowEmptyString('description');
return $validator;
}
-
Định nghĩa quan hệ giữa các bảng:
Nếu bảng
lessons
liên kết với bảngusers
quauser_id
, bạn có thể định nghĩa quan hệ như sau:
$this->belongsTo('Users', [
'foreignKey' => 'user_id',
'joinType' => 'INNER',
]);
1.2. Tuỳ chỉnh Entity
class
File: src/Model/Entity/<TênBảnGhi>.php
Ví dụ: Lesson.php
Bạn có thể tuỳ chỉnh các thuộc tính có thể được gán hàng loạt:
protected $_accessible = [
'*' => true, // Cho phép tất cả các trường được gán
'id' => false, // Ngoại trừ trường id
];
Hoặc thêm các phương thức định dạng dữ liệu:
protected function _getTitleWithDate()
{
return $this->title . ' (' . $this->created->format('Y-m-d') . ')';
}
2. Tuỳ chỉnh Controller
File: src/Controller/<TênController>Controller.php
Sau khi tạo bằng lệnh:
bin/cake bake controller lessons
Sẽ tạo file LessonsController.php
.
2.1. Thêm logic trong các action
Mặc định, các action như index
, view
, add
, edit
, và delete
được tạo với logic cơ bản. Bạn có thể bổ sung logic riêng:
Ví dụ, thêm logic sắp xếp trong action index
:
public function index()
{
$this->paginate = [
'order' => ['Lessons.created' => 'DESC'],
'limit' => 10,
];
$lessons = $this->paginate($this->Lessons);
$this->set(compact('lessons'));
}
2.2. Thêm middleware hoặc kiểm tra quyền truy cập
Bạn có thể sử dụng beforeFilter
để kiểm tra quyền:
public function beforeFilter(\Cake\Event\EventInterface $event)
{
parent::beforeFilter($event);
// Cho phép truy cập action 'index' mà không cần đăng nhập
$this->Authentication->allowUnauthenticated(['index']);
}
3. Tuỳ chỉnh View
Các file View được lưu trong thư mục: src/Template/<TênBảng>/
.
3.1. Sửa file View
Ví dụ, file index.php
:
<h1>Danh sách bài học</h1>
<table>
<thead>
<tr>
<th>Tiêu đề</th>
<th>Mô tả</th>
<th>Ngày tạo</th>
<th>Hành động</th>
</tr>
</thead>
<tbody>
<?php foreach ($lessons as $lesson): ?>
<tr>
<td><?= h($lesson->title) ?></td>
<td><?= h($lesson->description) ?></td>
<td><?= h($lesson->created->format('d/m/Y')) ?></td>
<td>
<?= $this->Html->link('Xem', ['action' => 'view', $lesson->id]) ?>
<?= $this->Html->link('Sửa', ['action' => 'edit', $lesson->id]) ?>
<?= $this->Form->postLink('Xoá', ['action' => 'delete', $lesson->id], ['confirm' => 'Bạn có chắc chắn muốn xoá?']) ?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
3.2. Tạo các phần dùng chung
Nếu có các thành phần giao diện dùng chung, hãy tạo file Element. Ví dụ:
Tạo file src/Template/Element/lesson_card.php
:
<div class="lesson-card">
<h3><?= h($lesson->title) ?></h3>
<p><?= h($lesson->description) ?></p>
</div>
Sử dụng trong View:
<?= $this->element('lesson_card', ['lesson' => $lesson]) ?>
4. Tuỳ chỉnh Routing
Mặc định, CakePHP tự động tạo URL dựa trên Controller và action. Tuy nhiên, bạn có thể tuỳ chỉnh trong file config/routes.php
:
Ví dụ, tạo URL thân thiện:
$routes->connect('/lessons/:id', ['controller' => 'Lessons', 'action' => 'view'], ['pass' => ['id'], 'id' => '\d+']);
Kết luận
Sử dụng lệnh Bake
chỉ là bước khởi đầu, giúp bạn tiết kiệm thời gian tạo code cơ bản. Sau đó, bạn có thể tuỳ chỉnh các thành phần (Model, Controller, View) để đáp ứng nhu cầu cụ thể của dự án. Hãy tận dụng sức mạnh của CakePHP để tạo ra các ứng dụng linh hoạt và hiệu quả!

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