Tạo CRUD nhanh với Gii

Tạo bởi Hoàng Vũ, chỉnh sửa cuối lúc 19 tháng 5, 2025

Bài học này hướng dẫn học viên cách sử dụng Gii – công cụ sinh mã tự động của Yii – để tạo nhanh các chức năng CRUD (Create, Read, Update, Delete) cho một bảng trong cơ sở dữ liệu. Học viên sẽ học cách cài đặt Gii, sử dụng trình tạo CRUD, và hiểu cách tùy chỉnh mã nguồn được sinh ra để phục vụ các nhu cầu thực tế.

1. Gii là gì?

  • Gii là một module do Yii cung cấp, giúp tự động sinh mã nguồn cho các thành phần như Model, Controller, CRUD, Form, Module, v.v.
  • Gii giúp tăng tốc phát triển ứng dụng, giảm thiểu sai sót khi viết mã thủ công.

2. Kích hoạt Gii

Mở file config/web.php, thêm hoặc kiểm tra cấu hình:

if (YII_ENV_DEV) {
    $config['bootstrap'][] = 'gii';
    $config['modules']['gii'] = [
        'class' => 'yii\gii\Module',
    ];
}

Truy cập Gii trong trình duyệt:

http://localhost/index.php?r=gii

3. Tạo CRUD bằng Gii

  1. Truy cập: Gii Home > CRUD Generator

  2. Nhập các thông tin:

    • Model Class: app\models\Post
    • Search Model Class: app\models\PostSearch
    • Controller Class: app\controllers\PostController
  3. Nhấn Preview, sau đó chọn Generate

Kết quả:

  • Controller: controllers/PostController.php
  • View: views/post/
  • Search Model: models/PostSearch.php

4. Cấu trúc CRUD được sinh ra

Gii tạo sẵn các chức năng:

  • index – hiển thị danh sách bản ghi, có phân trang và tìm kiếm
  • view – hiển thị chi tiết bản ghi
  • create – tạo bản ghi mới
  • update – cập nhật bản ghi
  • delete – xóa bản ghi

5. Truy cập giao diện CRUD

Sau khi tạo xong, có thể truy cập:

http://localhost/index.php?r=post

Các URL tương ứng:

  • Danh sách: /index.php?r=post/index
  • Tạo mới: /index.php?r=post/create
  • Cập nhật: /index.php?r=post/update&id=1
  • Xóa: /index.php?r=post/delete&id=1
  • Xem chi tiết: /index.php?r=post/view&id=1

6. Tùy chỉnh code sinh ra từ Gii

Các phần thường được tùy chỉnh gồm:

a) Giao diện View

Mở file views/post/index.php, sửa lại tiêu đề:

$this->title = 'Danh sách bài viết';

b) Cập nhật các trường hiển thị

Trong views/post/index.php:

[
    'class' => 'yii\grid\GridView',
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
        ['class' => 'yii\grid\SerialColumn'],
        'id',
        'title',
        'created_at',
        ['class' => 'yii\grid\ActionColumn'],
    ],
];

Có thể thêm hoặc bớt các trường tùy theo yêu cầu.

c) Tùy chỉnh logic trong Controller

Trong PostController.php, bạn có thể thêm xử lý sau khi lưu:

if ($model->load(Yii::$app->request->post()) && $model->save()) {
    Yii::$app->session->setFlash('success', 'Bài viết đã được lưu');
    return $this->redirect(['view', 'id' => $model->id]);
}

Ví dụ cụ thể

1. Giả sử bạn đã có bảng post trong CSDL:

CREATE TABLE post (
    id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(255) NOT NULL,
    content TEXT,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

2. Thực hiện các bước:

  • Dùng Gii tạo Model Post
  • Dùng Gii tạo CRUD cho model Post
  • Truy cập: http://localhost/index.php?r=post
  • Tạo, sửa, xóa bài viết thông qua giao diện có sẵn

Kết luận

Sử dụng Gii để tạo CRUD giúp tiết kiệm thời gian và chuẩn hóa cách xây dựng chức năng quản lý dữ liệu trong ứng dụng Yii. Tuy nhiên, cần hiểu rõ mã nguồn được sinh ra để có thể tùy chỉnh hợp lý theo yêu cầu thực tế. Việc tùy chỉnh controller, view và giao diện tìm kiếm là rất cần thiết để nâng cấp từ mức mặc định lên mức chuyên nghiệp.

Website Logo

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.

Bình luận

Website Logo

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

Chúng Tôi Trên

Bạn đang muốn học về lập trình website?

Bạn cần nâng cao kiến thức chuyên nghiệp hơn để nâng cao cơ hội nghề nghiệp? Liên hệ