Sử dụng Agentic IDE với dự án CakePHP
Agentic IDE giúp đơn giản hóa và tăng tốc quá trình làm việc với CakePHP, một framework có nhiều quy ước và cấu trúc đặc thù.
1. Viết Document cho Action
Với một action trong Controller, bạn có thể yêu cầu Agentic IDE tạo DocBlock để làm rõ chức năng và các tham số.
"prompt: Tạo DocBlock cho Action"
Tạo DocBlock cho action view trong ArticlesController. Action này nhận một tham số $slug. Cần mô tả chức năng, tham số, exception có thể xảy ra (NotFoundException), và kiểu dữ liệu trả về.
Ví dụ Agentic IDE thực hiện:
class ArticlesController extends AppController
{
/**
* Hiển thị một bài viết dựa trên slug.
*
* @param string|null $slug The article slug.
* @return \Cake\Http\Response|null
* @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
*/
public function view($slug = null)
{
$article = $this->Articles->findBySlug($slug)->firstOrFail();
$this->set(compact('article'));
}
}2. Điều tra kiến trúc hệ thống
Hiểu các mối quan hệ và cấu trúc của một dự án CakePHP hiện có.
"prompt: Điều tra kiến trúc hệ thống"
Phân tích dự án CakePHP này. Liệt kê các Plugin đã được load, các Component và Helper được sử dụng trong AppController. Vẽ biểu đồ Mermaid thể hiện mối quan hệ giữa các table: users, articles, và tags (quan hệ many-to-many).
Ví dụ Agentic IDE thực hiện:
Plugins đã load:
AuthenticationAuthorizationMigrationsDebugKit
Components trong AppController:
FlashComponentAuthentication.Authentication
Helpers trong AppController:
FormHelperHtmlHelperUrlHelper
Biểu đồ quan hệ Tables:
3. Debug lỗi
Agentic IDE có thể nhanh chóng xác định nguyên nhân của các lỗi phổ biến trong CakePHP.
"prompt: Debug lỗi không tìm thấy Table class"
Lỗi "Table class for alias Authors could not be found" xảy ra khi tôi cố gắng truy vấn $this->Articles->find()->contain(['Authors']). Phân tích và chỉ ra nguyên nhân. Đề xuất cách sửa.
Ví dụ Agentic IDE thực hiện:
Phân tích: Lỗi này xảy ra vì CakePHP không tìm thấy class AuthorsTable. Nguyên nhân thường là do có sự không nhất quán trong quy ước đặt tên. Tên của association phải là Authors (số nhiều), tương ứng với AuthorsTable, nhưng có thể bạn đã đặt tên bảng hoặc model là Author (số ít).
Cách sửa đề xuất:
Kiểm tra tên association: Đảm bảo rằng trong
ArticlesTable.php, association được định nghĩa đúng:php// In src/Model/Table/ArticlesTable.php public function initialize(array $config): void { parent::initialize($config); $this->belongsTo('Authors', [ 'foreignKey' => 'author_id', ]); }Đổi tên association trong câu lệnh
contain: Nếu bạn muốn giữ tên association làAuthor(số ít), bạn cần cập nhật lại câu lệnh:php$query = $this->Articles->find()->contain(['Author']);
4. Phát triển tính năng mới
Yêu cầu Agentic IDE tạo code cho một tính năng tìm kiếm đơn giản.
"prompt: Phát triển tính năng tìm kiếm"
Tạo tính năng tìm kiếm bài viết trong ArticlesController@index.
- Thêm một form tìm kiếm trong file template
index.php. - Cập nhật action
indexđể lọc các bài viết dựa trên query param?q=. - Việc tìm kiếm nên dựa trên cả
titlevàbodycủa bài viết.
Ví dụ Agentic IDE thực hiện:
1. Cập nhật templates/Articles/index.php:
<?= $this->Form->create(null, ['type' => 'get']) ?>
<?= $this->Form->control('q', ['label' => 'Search', 'value' => $this->request->getQuery('q')]) ?>
<?= $this->Form->button(__('Search')) ?>
<?= $this->Form->end() ?>2. Cập nhật src/Controller/ArticlesController.php:
public function index()
{
$this->paginate = [
'contain' => ['Users'],
];
$query = $this->Articles->find();
$searchQuery = $this->request->getQuery('q');
if ($searchQuery) {
$query->where([
'OR' => [
'Articles.title LIKE' => '%' . $searchQuery . '%',
'Articles.body LIKE' => '%' . $searchQuery . '%',
]
]);
}
$articles = $this->paginate($query);
$this->set(compact('articles'));
}