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. 深入Android渲染机制

    1.知识储备 CPU: 中央处理器,它集成了运算,缓冲,控制等单元,包括绘图功能.CPU将对象处理为多维图形,纹理(Bitmaps.Drawables等都是一起打包到统一的纹理). GPU:一个类似于 ...

  2. 调用tf.softmax_cross_entropy_with_logits函数出错解决

    原来这个函数,不能按以前的方式进行调用了,只能使用命名参数的方式来调用.原来是这样的: tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(y ...

  3. ZooKeeper 授权验证

    ZooKeeper 授权验证 学习了:https://blog.csdn.net/liuyuehu/article/details/52121755 zookeeper可以进行认证授权:

  4. PS 基础知识 渐变编辑器如何使用

    ps渐变编辑器在哪 [ 标签:渐变,ps 渐变,编辑器 ] _______志 敏 回答:3 人气:9 解决时间:2009-04-16 15:28 满意答案 你先点渐变工具 然后左上出现渐变条设置 如图 ...

  5. 关于Oracle中sysoper这个系统权限的问题

    我们都知道Oracle数据库安装完之后.默认的会有这样几个系统角色或权限.nomal,sysdba,sysoper等等,之前每次登录Oracle的时候.都是直接以conn / as sysdba 的身 ...

  6. vue2.0 + vux (六)NewsList 资讯页 及 NewsDetail 资讯详情页

    设置代理,避免出现跨域问题 /*设置代理,避免出现跨域问题*/ proxyTable: { '/api':{ target: 'https://www.oschina.net/action/apiv2 ...

  7. 向odoo贡献中文翻译

    建议通过 osc-git向odoo贡献中文翻译     osc-git 是指'开源中国'的git平台. 网址是 http://git.oschina.net/     注册osc-git 账号省略. ...

  8. Balanced Binary Tree——数是否是平衡,即任意节点左右字数高度差不超过1

    Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary ...

  9. java 文件的写入和读取

    //写入操作 方法1 OutputStream f = new FileOutputStream("C:/j/j.txt"); f.write("aaaaaaa" ...

  10. Error: Cannot find module 'webpack'错误解决

    $ npm install webpack -g $ npm install webpack-cli -g 全局安装webpack $ npm run dev Error: Cannot find m ...