Filter: 过滤,'filter'=>'trim',表示去空格

Required:必须的,表示不能为空

Match: 匹配正则,需要和pattern一起使用,定义正则表达式,'pattern'=>'/^\w{6,20}$/',

Unique:验证数据唯一性,在注册时用到的比较多,这里需要注意的是,在rules规则里面定义的唯一性验证,只有在服务器端才能验证,如果想要在表单页面显示,需要开启”enableAjaxValidation”=>ture;

例如:

<?php $form = ActiveForm::begin([

'id'=>'sign-form',

//'enableAjaxValidation' => true,//启用ajax验证,将属性值发送到服务器端进行验证并返回结果,默认为false

'enableClientValidation' => true,//启用客户端验证,默认值为true,关闭后表单无js验证

'options'=>['action'=>'usermessage/signform', 'method'=>'post', 'enctype'=>'multipart/form-data']]); ?>

这里需要注意的是,在这里启用的话,ajax验证是作用于所有的属性的,所以,还有另一种开启方式,在某一个field里面开启

例如:<?= $form->field($model, 'username', ['enableAjaxValidation'=>true])->textInput() ?>,这样就单独作用于username属性了。

要想实现表单ajax验证唯一性,后台还要一个ajax判断:把以下代码复制到控制器实例化模型层的下边

$model->load(Yii::$app->request->post());

if (Yii::$app->request->isAjax)

{

Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;

return \yii\bootstrap\ActiveForm::validate($model);

}

在有数据提交时,最好先执行$model->load(Yii::$app->request->post()); 操作,不要做多余的处理,然后判断ajax,否则ajax验证的时候可能会报错500。如果有验证码,这里就会有另一个问题:return \yii\bootstrap\ActiveForm::validate($model);这个验证的是所有的属性,而验证码执行validate后就会重新生成,那么在表单提交时我们进行数据有效性验证时就会报错,解决方式:\yii\bootstrap\ActiveForm::validate()这个方法其实是有两个参数的,$model,$attributes,我们可以指定ajax验证某一些特定的属性,写法是:\yii\bootstrap\ActiveForm::validate($model, ['username', 'email', 'phone']);这样ajax验证时就只验证username,email,phone这三个字段了,不会影响验证码。

Number:数字验证,加上'integerOnly'=>true,表示只能是整数,max,min分别表示最大最小值,tooBig和tooSmall分别是超过最大值和低于最小值时的错误提示信息

Compare:比较,用于两个属性之间的比较,'compareAttribute'=>'password',表示与password比较

In:和range连用,定义范围,表示属性值必须在这个范围内,通常用于验证某些固定值

Email:邮箱验证

File:文件验证 extensions可以定义上传文件的类型

Captcha:验证码验证,需要定义生成验证码的方法,'captchaAction'=>'usermessage/captcha',usermessage表示控制器名,captcha表示方法名

可以在控制器层定义一个actions方法添加captcha方法

/**

* 生成验证码的方法

*/

public function actions() {

parent::actions();

return [

'captcha' => [

'class' => 'yii\captcha\CaptchaAction',

//'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,

'maxLength' => 3,

'minLength' => 3

],

];

}

每一个验证都可以添加应用场景:’on’=>’register’;

在控制器层实例化模型层

$model = new Usermessage();

$model->setScenario('register');   定义使用应用场景为register

在模型层需要定义场景作用的对象

/**

* 定义验证场景

*/

public function scenarios()

{

return [

'register' => ['username', 'password', 'repassword', 'age', 'sex', 'phone','email'],

'login' => ['username', 'password','age', 'sex', 'phone','email'],

];

}

然后在对应的验证规则后面限定应用场景’on’=>’register’;

当表单验证时,为在作用场景以内的参数可以不受验证规则的限制

添加入库:复选框因提交过来后是一个数组,所以在执行save()前需要将复选框的值处理成字符串

Yii 表单验证规则---总结的更多相关文章

  1. YII 表单验证规则

    官方文档:http://www.yiichina.com/guide/form.model 类参考手册:http://www.yiichina.com/api/CValidatorhttp://www ...

  2. jquery.validate.js使用之自定义表单验证规则

    jquery.validate.js使用之自定义表单验证规则,下面列出了一些常用的验证法规则 jquery.validate.js演示查看 jquery validate强大的jquery表单验证插件 ...

  3. Element表单验证规则

    一.简单的逻辑验证使用方法: 方法步骤: 1.在html中给el-form增加 :rules="rules" 2.html中在el-form-item 中增加属性 prop=&qu ...

  4. CI设置表单验证规则

    CodeIgniter 允许你为单个表单域创建多个验证规则,按顺序层叠在一起, 你也可以同时对表单域的数据进行预处理.要设置验证规则, 可以使用 set_rules() 方法: $this->f ...

  5. iview必备技能一、表单验证规则

    iView表单组件使用async-validator验证器对表单域中数据进行验证,给Form 设置属性 rules,同时给需要验证的 FormItem 设置属性 prop 指向对应字段即可. 完整的验 ...

  6. Yii表单验证

    我之前在朋友的公司拿到他们oa的代码,发现是用Yii写的,oa系统比较简单,但是程序员对Yii的运用比较好,我拿来学习一下.如果有需要,我可以私下分享这个程序,因为是人家的功劳,不在网上公布代码了,只 ...

  7. jquery.validate.js之自定义表单验证规则

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  8. vue + element 实现登录注册(自定义表单验证规则)

    注册页包含手机验证码登录和密码的二次验证. 效果如下: 实现代码: <template> <div> <div class="register-wrapper& ...

  9. [转]DWZ表单验证规则一览表(留着自己用)

    <form onsubmit="return validateCallback(this)" class="pageForm" action=" ...

随机推荐

  1. 渗透测试思路 | Linux下自动化搭建FakeAP,劫持用户在Portal认证下的所有流量

    如何在linux下搭建一个fakeap,使得portal认证下的用户无法发现连接你的假AP,并且能够正常上网.先说一下portal认证.无线WIFI认证方式主要有wpa2 和 open两种,而port ...

  2. Tyvj3308毒药解药题解

    题目大意 这些药都有可能在治愈某些病症的同一时候又使人患上某些别的病症--经过我天才的努力.最终弄清了每种药的详细性能,我会把每种药能治的病症和能使人患上的病症列一张清单给你们,然后你们要依据这张清单 ...

  3. Android HandlerThread 消息循环机制之源代码解析

    关于 HandlerThread 这个类.可能有些人眼睛一瞟,手指放在键盘上,然后就是一阵狂敲.立即就能敲出一段段华丽的代码: HandlerThread handlerThread = new Ha ...

  4. hdoj 2188 悼念512汶川大地震遇难同胞——选拔志愿者 【巴什博弈】

    题意:. . . 策略:最简单的典型的巴什博弈. 代码: #include<stdio.h> int main() { int n, m; int t; scanf("%d&qu ...

  5. Solaris之单用户模式

    1.TERM 表示终端 vt100 是简单的终端模式 export TERM=vt100 在此模式下,方向键无效,用字母键 有很多环境变量,PATH .PS1 .TERM 一般在屏幕上写的都是暂时的, ...

  6. JobConf

    /**  * A map/reduce job configuration. * 翻译:一个map/reduce作业配置 * <p><code>JobConf</code ...

  7. Linux基础(1)- 命令和目录文件

    1.开启Linux操作系统,要求以root用户登录GNOME图形界面,语言支持选择为汉语 Linux操作界面如图: 右击桌面,点击打开终端 输入“su”,点击回车键,出现密码,输入密码,点击回车键,显 ...

  8. cocos2d0基础篇笔记二

    1.菜单的使用: CCMenuItemimage*image=CCMenuItemImage*create("xxx.png", "xxx,png", &quo ...

  9. kubernetes高级之创建只读文件系统以及只读asp.net core容器

    系列目录 使用docker创建只读文件系统 容器化部署对应用的运维带来了极大的方便,同时也带来一些新的安全问题需要考虑.比如黑客入侵到容器内,对容器内的系统级别或者应用级别文件进行修改,会造成难以估量 ...

  10. java: private, protected, public

    这三个 「可访问修饰符」,是一个老生常谈的话题了.在 C++ 中也有类似的概念. 按其修饰对象的不同,分为几种用法小记一下: 用于类 只有 public 可以修饰类:private 和 protect ...