Yii 表单验证规则---总结
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 表单验证规则---总结的更多相关文章
- YII 表单验证规则
官方文档:http://www.yiichina.com/guide/form.model 类参考手册:http://www.yiichina.com/api/CValidatorhttp://www ...
- jquery.validate.js使用之自定义表单验证规则
jquery.validate.js使用之自定义表单验证规则,下面列出了一些常用的验证法规则 jquery.validate.js演示查看 jquery validate强大的jquery表单验证插件 ...
- Element表单验证规则
一.简单的逻辑验证使用方法: 方法步骤: 1.在html中给el-form增加 :rules="rules" 2.html中在el-form-item 中增加属性 prop=&qu ...
- CI设置表单验证规则
CodeIgniter 允许你为单个表单域创建多个验证规则,按顺序层叠在一起, 你也可以同时对表单域的数据进行预处理.要设置验证规则, 可以使用 set_rules() 方法: $this->f ...
- iview必备技能一、表单验证规则
iView表单组件使用async-validator验证器对表单域中数据进行验证,给Form 设置属性 rules,同时给需要验证的 FormItem 设置属性 prop 指向对应字段即可. 完整的验 ...
- Yii表单验证
我之前在朋友的公司拿到他们oa的代码,发现是用Yii写的,oa系统比较简单,但是程序员对Yii的运用比较好,我拿来学习一下.如果有需要,我可以私下分享这个程序,因为是人家的功劳,不在网上公布代码了,只 ...
- jquery.validate.js之自定义表单验证规则
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- vue + element 实现登录注册(自定义表单验证规则)
注册页包含手机验证码登录和密码的二次验证. 效果如下: 实现代码: <template> <div> <div class="register-wrapper& ...
- [转]DWZ表单验证规则一览表(留着自己用)
<form onsubmit="return validateCallback(this)" class="pageForm" action=" ...
随机推荐
- 深入Android渲染机制
1.知识储备 CPU: 中央处理器,它集成了运算,缓冲,控制等单元,包括绘图功能.CPU将对象处理为多维图形,纹理(Bitmaps.Drawables等都是一起打包到统一的纹理). GPU:一个类似于 ...
- 调用tf.softmax_cross_entropy_with_logits函数出错解决
原来这个函数,不能按以前的方式进行调用了,只能使用命名参数的方式来调用.原来是这样的: tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(y ...
- ZooKeeper 授权验证
ZooKeeper 授权验证 学习了:https://blog.csdn.net/liuyuehu/article/details/52121755 zookeeper可以进行认证授权:
- PS 基础知识 渐变编辑器如何使用
ps渐变编辑器在哪 [ 标签:渐变,ps 渐变,编辑器 ] _______志 敏 回答:3 人气:9 解决时间:2009-04-16 15:28 满意答案 你先点渐变工具 然后左上出现渐变条设置 如图 ...
- 关于Oracle中sysoper这个系统权限的问题
我们都知道Oracle数据库安装完之后.默认的会有这样几个系统角色或权限.nomal,sysdba,sysoper等等,之前每次登录Oracle的时候.都是直接以conn / as sysdba 的身 ...
- vue2.0 + vux (六)NewsList 资讯页 及 NewsDetail 资讯详情页
设置代理,避免出现跨域问题 /*设置代理,避免出现跨域问题*/ proxyTable: { '/api':{ target: 'https://www.oschina.net/action/apiv2 ...
- 向odoo贡献中文翻译
建议通过 osc-git向odoo贡献中文翻译 osc-git 是指'开源中国'的git平台. 网址是 http://git.oschina.net/ 注册osc-git 账号省略. ...
- Balanced Binary Tree——数是否是平衡,即任意节点左右字数高度差不超过1
Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary ...
- java 文件的写入和读取
//写入操作 方法1 OutputStream f = new FileOutputStream("C:/j/j.txt"); f.write("aaaaaaa" ...
- Error: Cannot find module 'webpack'错误解决
$ npm install webpack -g $ npm install webpack-cli -g 全局安装webpack $ npm run dev Error: Cannot find m ...