Tạo và xử lý Form

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

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

  1. Form được tạo bằng ActiveForm::begin() và liên kết với một đối tượng model.

  2. 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.

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.

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ệ