yii 输入验证
2016-04-14 17:52
639 查看
验证代码,这块代码就是model里面最最常见的代码块了。另外在基本的save、update这些方法的调用里面也会做校验,所以不需要额外手工再调一次这么麻烦。
可以通过在声明规则的时候同时指定 message 属性,来定制某个规则的错误信息。
一些验证器还支持用于针对不同原因的验证失败返回更加准确的额外错误信息。比如,yii\validators\NumberValidator 验证器就支持 yii\validators\NumberValidator::tooBig 和 yii\validators\NumberValidator::tooSmall 两种错误消息用于分别返回输入值是太大还是太小。
eg
若你需要支持客户端的条件验证,你应该配置 yii\validators\Validator::whenClient 属性,它会读入一条包含有 JavaScript 函数的字符串。这个函数将被用于确定该客户端验证规则是否被启用。
默认情况下,当输入项为空字符串,空数组,或 null 时,会被视为“空值”。你也可以通过配置 yii\validators\Validator::isEmpty 属性来自定义空值的判定规则。
对于绝大多数验证器而言,若其 yii\base\Validator::skipOnEmpty 属性为默认值 true,则它们不会对空值进行任何处理。
- 可以调用所需验证器的 yii\validators\Validator::validate() 方法。
- 若你需要针对一系列值执行多项验证,你可以使用 yii\base\DynamicModel 。
- 行内验证器(Inline Validators)
行内验证器是一种以模型方法或匿名函数的形式定义的验证器。
- 独立验证器(Standalone Validators)
独立验证器是继承自 yii\validators\Validator 或其子类的类。
// 用用户输入来填充模型的特性 $model->attributes = \Yii::$app->request->post('ContactForm'); if ($model->validate()) { // 若所有输入都是有效的 } else { // 有效性验证失败:$errors 属性就是存储错误信息的数组 $errors = $model->errors; }
yii\base\Model::rules()函数的规则格式:
[ // 必须项,用于指定那些模型特性需要通过此规则的验证。 // 对于只有一个特性的情况,可以直接写特性名,而不必用数组包裹。 ['attribute1', 'attribute2', ...], // 必填项,用于指定规则的类型。 // 它可以是类名,验证器昵称,或者是验证方法的名称。 'validator', // 可选项,用于指定在场景(scenario)中,需要启用该规则 // 若不提供,则代表该规则适用于所有场景 // 若你需要提供除了某些特定场景以外的所有其他场景,你也可以配置 "except" 选项 'on' => ['scenario1', 'scenario2', ...], // 可选项,用于指定对该验证器对象的其他配置选项 'property1' => 'value1', 'property2' => 'value2', ... ]
自定义错误信息
大多数的验证器都有默认的错误信息,当模型的某个特性验证失败的时候,该错误信息会被返回给模型。可以通过在声明规则的时候同时指定 message 属性,来定制某个规则的错误信息。
public function rules() { return [ ['username', 'required', 'message' => 'Please choose a username.'], ]; }
一些验证器还支持用于针对不同原因的验证失败返回更加准确的额外错误信息。比如,yii\validators\NumberValidator 验证器就支持 yii\validators\NumberValidator::tooBig 和 yii\validators\NumberValidator::tooSmall 两种错误消息用于分别返回输入值是太大还是太小。
条件式验证
若要只在某些条件满足时,才验证相关特性,比如:是否验证某特性取决于另一特性的值,你可以通过 yii\validators\Validator::when 属性来定义相关条件。这个功能可以用于判断一些关联字段的必填非必填关系。eg
[ ['state', 'required', 'when' => function($model,$attribute) { return $model->country == 'USA'; }], ]
若你需要支持客户端的条件验证,你应该配置 yii\validators\Validator::whenClient 属性,它会读入一条包含有 JavaScript 函数的字符串。这个函数将被用于确定该客户端验证规则是否被启用。
[ ['state', 'required', 'when' => function ($model) { return $model->country == 'USA'; }, 'whenClient' => "function (attribute, value) { return $('#country').value == 'USA'; }"], ]
数据预处理
trim、default、filter 这些过滤器都可以对数据进行预处理。处理空输入
当输入数据是通过 HTML 表单,你经常会需要给空的输入项赋默认值。你可以通过调整 default 验证器来实现这一点。默认情况下,当输入项为空字符串,空数组,或 null 时,会被视为“空值”。你也可以通过配置 yii\validators\Validator::isEmpty 属性来自定义空值的判定规则。
对于绝大多数验证器而言,若其 yii\base\Validator::skipOnEmpty 属性为默认值 true,则它们不会对空值进行任何处理。
临时验证
有时,你需要对某些没有绑定任何模型类的值进行 临时验证。- 可以调用所需验证器的 yii\validators\Validator::validate() 方法。
- 若你需要针对一系列值执行多项验证,你可以使用 yii\base\DynamicModel 。
创建验证器(Validators)
自定义的验证器可以是行内验证器,也可以是独立验证器。- 行内验证器(Inline Validators)
行内验证器是一种以模型方法或匿名函数的形式定义的验证器。
- 独立验证器(Standalone Validators)
独立验证器是继承自 yii\validators\Validator 或其子类的类。
客户端验证器(Client-Side Validation)
相关文章推荐
- YII Framework框架教程之安全方案详解
- Yii PHP Framework实用入门教程(详细介绍)
- PHP的Yii框架中Model模型的学习教程
- 详解PHP的Yii框架中自带的前端资源包的使用
- Yii操作数据库的3种方法
- 在yii中新增一个用户验证的方法详解
- 详解PHP的Yii框架中的Controller控制器
- PHP的Yii框架中过滤器相关的使用总结
- Yii框架在页面输出执行sql语句以方便调试的实现方法
- YII动态模型(动态表名)支持分析
- 浅析Yii中使用RBAC的完全指南(用户角色权限控制)
- 详解在PHP的Yii框架中使用行为Behaviors的方法
- Yii 连接、修改 MySQL 数据库及phpunit 测试连接
- 深入讲解PHP的Yii框架中的属性(Property)
- yii实现使用CUploadedFile上传文件的方法
- 实例讲解如何在PHP的Yii框架中进行错误和异常处理
- 解读PHP的Yii框架中请求与响应的处理流程
- 详解PHP的Yii框架中组件行为的属性注入和方法注入
- YII Framework学习之request与response用法(基于CHttpRequest响应)
- Yii中CArrayDataProvider和CActiveDataProvider区别实例分析