Tạo và xử lý Form
Form là một phần quan trọng trong các ứng dụng web – cho phép người dùng nhập và gửi dữ liệu. Bài học này hướng dẫn học viên cách tạo form trong Yii sử dụng ActiveForm, cách gán dữ liệu từ form vào model, kiểm tra hợp lệ và xử lý sau khi submit. Đây là nền tảng cho các chức năng như đăng ký, đăng nhập, đăng bài viết, liên hệ, v.v.

1. Tạo Model để xử lý dữ liệu
Tạo một model không liên quan đến bảng dữ liệu (Form Model):
// models/ContactForm.php
namespace app\models;
use yii\base\Model;
class ContactForm extends Model
{
public $name;
public $email;
public $subject;
public $body;
public function rules()
{
return [
[['name', 'email', 'subject', 'body'], 'required'],
['email', 'email'],
];
}
}
Sử dụng
yii\base\Model
thay vìyii\db\ActiveRecord
khi model không liên kết với bảng CSDL.
2. Tạo form bằng ActiveForm
Trong controller:
// controllers/SiteController.php
use app\models\ContactForm;
public function actionContact()
{
$model = new ContactForm();
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
// Dữ liệu hợp lệ, xử lý ở đây (ví dụ: gửi email, lưu log...)
Yii::$app->session->setFlash('success', 'Cảm ơn bạn đã liên hệ.');
return $this->refresh();
}
return $this->render('contact', ['model' => $model]);
}
3. View với ActiveForm
Tạo file: views/site/contact.php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
$this->title = 'Liên hệ';
?>
<h1><?= Html::encode($this->title) ?></h1>
<?php if (Yii::$app->session->hasFlash('success')): ?>
<div class="alert alert-success">Cảm ơn bạn đã gửi liên hệ!</div>
<?php else: ?>
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'name') ?>
<?= $form->field($model, 'email') ?>
<?= $form->field($model, 'subject') ?>
<?= $form->field($model, 'body')->textarea(['rows' => 6]) ?>
<div class="form-group">
<?= Html::submitButton('Gửi', ['class' => 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
<?php endif; ?>
4. Quy trình xử lý form
-
Form được tạo bằng
ActiveForm::begin()
và liên kết với một đối tượng model. -
Khi người dùng nhấn nút Submit:
- Yii tự động truyền dữ liệu từ
POST
vào$model
thông qua$model->load(...)
. - Gọi
$model->validate()
để kiểm tra dữ liệu theo các rule đã định nghĩa. - Nếu hợp lệ, xử lý tiếp; nếu không, hiển thị lỗi bên dưới từng trường.
- Yii tự động truyền dữ liệu từ
Ví dụ cụ thể
Giả sử bạn có yêu cầu tạo form liên hệ gồm: họ tên, email, tiêu đề và nội dung liên hệ. Khi người dùng gửi, hệ thống xác nhận và hiển thị thông báo.
- Tạo model:
ContactForm
- Tạo action:
SiteController::actionContact()
- Tạo view:
views/site/contact.php
Sau đó truy cập:
http://localhost/index.php?r=site/contact
Thử gửi form với dữ liệu đúng và sai để kiểm tra tính năng kiểm tra lỗi và phản hồi.
Kết luận
Việc xây dựng form trong Yii thông qua ActiveForm
mang lại nhiều tiện ích: liên kết trực tiếp với model, kiểm tra hợp lệ tự động và hiển thị lỗi thân thiện. Bằng cách tách biệt rõ ràng giữa model – controller – view, Yii giúp lập trình viên dễ dàng mở rộng và bảo trì mã nguồn. Thành thạo kỹ năng xử lý form sẽ giúp bạn xây dựng nhiều tính năng quan trọng cho ứng dụng web.

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