Yii2.0 提供了强大的表单验证功能,可以通过以下步骤进行表单验证:
在控制器中定义一个名为 rules() 的方法,用于指定表单字段的验证规则,例如:
public function rules()
{
return [
[['username', 'password'], 'required'],
['email', 'email'],
['password', 'string', 'min' => 6],
];
}
在上面的示例中,rules() 方法返回一个包含三个验证规则的数组:
[['username', 'password'], 'required'] 表示 username 和 password 字段是必填的。
['email', 'email'] 表示 email 字段必须是一个有效的邮箱地址。
['password', 'string', 'min' => 6] 表示 password 字段必须是一个至少包含 6 个字符的字符串。
在视图中使用 ActiveForm 小部件来生成表单,并使用 ActiveForm::begin() 和 ActiveForm::end() 方法将表单包装起来。例如:
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'username') ?>
<?= $form->field($model, 'email') ?>
<?= $form->field($model, 'password')->passwordInput() ?>
<div class="form-group">
<?= Html::submitButton('Submit', ['class' => 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
在上面的示例中,$model 是包含表单数据的模型对象。$form->field() 方法用于生成表单字段的 HTML 代码,其中的 ->passwordInput() 方法用于将 password 字段渲染为密码输入框。
在控制器中处理表单提交,并使用 $model->validate() 方法进行验证。例如:
public function actionCreate()
{
$model = new User();
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
// 表单数据有效,执行相应的操作
$model->save();
return $this->redirect(['view', 'id' => $model->id]);
}
return $this->render('create', [
'model' => $model,
]);
}
在上面的示例中,$model->load(Yii::$app->request->post()) 方法用于将表单数据加载到模型对象中。$model->validate() 方法用于验证表单数据是否有效,如果有效则执行相应的操作,否则重新渲染表单并显示错误消息。
底层原理是,当调用 $model->validate() 方法时,Yii2.0 会根据 rules() 方法中定义的验证规则,对模型对象的属性进行验证。验证过程中,Yii2.0 会自动根据属性的数据类型、验证规则以及场景等信息,生成相应的验证器,并依次执行这些验证器。如果所有验证器都通过了验证,则 $model->validate() 方法返回 `true