Validation dữ liệu
Kiểm tra dữ liệu đầu vào (validation) là bước quan trọng để đảm bảo rằng dữ liệu người dùng nhập vào là hợp lệ trước khi được xử lý hoặc lưu vào cơ sở dữ liệu. Bài học này giúp học viên hiểu cách định nghĩa các quy tắc xác thực (rules) trong model của Yii, sử dụng các validator có sẵn và cách tạo validator tùy chỉnh.

1. Xác thực dữ liệu trong Yii
Trong Yii, việc xác thực dữ liệu được thực hiện trong phương thức rules()
của lớp model. Mỗi quy tắc là một mảng mô tả các thuộc tính cần xác thực, loại validator và các tùy chọn kèm theo.
2. Các rule xác thực phổ biến
a) required
– Bắt buộc nhập
['name', 'required']
b) email
– Kiểm tra định dạng email
['email', 'email']
c) string
– Kiểm tra chuỗi
['username', 'string', 'min' => 5, 'max' => 20]
d) integer
– Kiểm tra số nguyên
['age', 'integer', 'min' => 18, 'max' => 99]
e) match
– Kiểm tra theo biểu thức chính quy
['username', 'match', 'pattern' => '/^[a-z]\w*$/i']
f) compare
– So sánh với thuộc tính khác
['password_repeat', 'compare', 'compareAttribute' => 'password']
g) boolean
– Kiểm tra true/false
['agree', 'boolean']
h) in
– Kiểm tra giá trị nằm trong tập hợp
['status', 'in', 'range' => ['active', 'inactive']]
3. Ví dụ về khai báo nhiều rule trong một model
public function rules()
{
return [
[['name', 'email'], 'required'],
['email', 'email'],
['age', 'integer', 'min' => 18],
['username', 'string', 'min' => 5, 'max' => 20],
];
}
4. Custom Validation – Xác thực tùy chỉnh
a) Dùng phương thức trong model
public $username;
public function rules()
{
return [
['username', 'validateUsername'],
];
}
public function validateUsername($attribute, $params)
{
if ($this->$attribute === 'admin') {
$this->addError($attribute, 'Tên người dùng không được là "admin".');
}
}
b) Dùng lớp validator riêng
Tạo file components/EvenNumberValidator.php
:
namespace app\components;
use yii\validators\Validator;
class EvenNumberValidator extends Validator
{
public function validateAttribute($model, $attribute)
{
if ($model->$attribute % 2 !== 0) {
$model->addError($attribute, 'Giá trị phải là số chẵn.');
}
}
}
Sử dụng trong model:
use app\components\EvenNumberValidator;
public function rules()
{
return [
['number', EvenNumberValidator::class],
];
}
5. Kiểm tra hợp lệ trong Controller
Trong controller, thường xử lý như sau:
$model = new MyModel();
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
// Dữ liệu hợp lệ
} else {
// Dữ liệu không hợp lệ, hiển thị lỗi
}
Ví dụ cụ thể
Tạo model RegistrationForm.php
:
namespace app\models;
use yii\base\Model;
class RegistrationForm extends Model
{
public $username;
public $email;
public $password;
public $password_repeat;
public function rules()
{
return [
[['username', 'email', 'password', 'password_repeat'], 'required'],
['email', 'email'],
['username', 'string', 'min' => 5],
['password_repeat', 'compare', 'compareAttribute' => 'password'],
];
}
}
Form hiển thị lỗi dưới mỗi ô nếu nhập sai định dạng hoặc bỏ trống.
Kết luận
Xác thực dữ liệu là bước thiết yếu để bảo vệ tính toàn vẹn và bảo mật cho hệ thống. Yii cung cấp nhiều rule xác thực mạnh mẽ, dễ sử dụng, đồng thời hỗ trợ xác thực tùy chỉnh để đáp ứng các yêu cầu phức tạp. Việc hiểu rõ và sử dụng thành thạo validation giúp bạn xây dựng ứng dụng đáng tin cậy và an toàn hơn.

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