YII 表单验证规则
官方文档:
http://www.yiichina.com/guide/form.model
类参考手册:
http://www.yiichina.com/api/CValidator
http://www.php100.com/manual/yii/index.html Yii CModel.rules() 方法 、validate预定义完整列表、以及说说验证public array rules ()
{ .......}
array 要调用 validate() 时应用的有效性规则。返回属性的有效性规则。 声明验证规则,应重写此方法。 每个规则是数组具有以下结构:
array('attribute list', 'validator name', 'on'=>'scenario name', ...validation parameters...)
注:attribute list: 指定属性 (以逗号分隔) 进行验证 ;
validator name: 指定要使用的验证程序。 它可以是方法的一个模型类的一个内置的验证器或验证程序类 (或其路径的别名) 名称的名
称。 一种验证方法必须具有以下签名:
// $params refers to validation parameters given in the rulefunction validatorName($attribute,$params)
内置的验证程序是指在 CValidator::builtInValidators 中声明的验证程序之一。 验证程序的类是扩展 CValidator 的类。
on: 应执行有效性规则时,此选项指定的情形。 用逗号分开不同的方案。 如果未设置此选项,将在任何情况下应用规则。 请 方案 中有关
此选项的更多详细信息,参阅。
附加参数用于初始化相应的验证程序属性。 请参阅 individal 验证器类 API 可能的属性。
实例:
public function rules()
{
return array(
array('username, password, passwordConfirm, email, verifyCode', 'required'),
array('username, password, passwordConfirm, email', 'length', 'min'=>5 ,'max'=>128),
array('username', 'unique'),
array('email','email'),
array('passwordConfirm', 'compare', 'compareAttribute' => 'password'),
array('verifyCode', 'captcha', 'allowEmpty'=>!CCaptcha::checkRequirements(), 'message'=>'验证码输入不正确,请重新输入'),
);
}
预定义完整列表:
setFlash(), getFlash()可以完成验证成功后提示
2.errorSummary验证不通过的错误提示
rules()方法中定义的规则会在模型实例调用其 validate() 或 save() 方法时逐一执行。normalizeTags验证器是一个基于方法的验证器,Models/xx.php中的rules()的验证规则是对数据库表进行 的,Models/xxForm.php中的rules()的验证规则是对表单进行的,和数据库表没有关系,类名和文件名要相同 。
如果我们使用一个validator(验证器)类,则这个类必须继承CValidator。其实有三种方法可以指定validator(验证器),包括前面提到的一种格式:
1.第一种是在模型类中定义验证方法
2.第二种是指定一个单独的验证器类(这个类继承validators/CValidator )。
3.第三种是你可以使用Yii框架中现有的验证器,指定预定义的验证器别名即可。
Yii为你提供了很多预定义的验证器类,同时也指定了别名,用在定义规则时。Yii1.1版本,预定义的验证器别名的完整列表如下:
* boolean:它是CBooleanValidator类的别名,验证属性的值是布尔值(true或false)。
* captcha:它是CCaptchaValidator类的别名,验证属性的值等于一个显示的CAPTCHA(验证码)的值。
* compare:它是CCompareValidator类的别名,验证属性的值与另一个属性的值相等。
* email:它是CEmailValidator类的别名,验证属性的值为有一个有效的Email地址。
* default:它是CDefaultValidator类的别名,验证属性的值为分配的默认值。
* exist:它是CExistValidator类的别名,验证属性的值在表中的对应列中存在。
* file:它是CFileValidator类的别名,验证属性的值包含上传的文件。
* filter:它是CFilterValidator类的别名,用过滤器转换属性的值。
* in:它是CRangeValidator类的别名,验证属性值在一个预定义列表中。
* length:它是CStringValidator类的别名,验证属性值的长度在一个范围内。
* match:它是CRegularExpressionValidator类的别名,验证属性值匹配一个正则表达式。
* numerical:它是CNumberValidator类的别名,验证属性值是数字。
* required:它是CRequiredValidator类的别名,验证属性值必需有值,不能为空。
* type:它是CTypedValidator类的别名,验证属性值是一个指定的数据类型。
* unique:它是CUniquedValidator类的别名,验证属性值在表中的对应列中是唯一的。
* url:它是CUrlValidator类的别名,验证属性值是一个有效的URL。
1.自定义规则验证
然后在模型(model)的:
Java代码
const WEAK = 0;
const STRONG = 1;
public function rules()
{
return array(
array(‘password’, ‘passwordStrength’, ‘strength’=>self::STRONG),
);
} public function passwordStrength($attribute,$params)//(参数是固定格式)
{
if ($params['strength'] === self::WEAK)
$pattern = ‘/^(?=.*[a-zA-Z0-9]).{5,}$/’;
elseif ($params['strength'] === self::STRONG)
$pattern = ‘/^(?=.*\d(?=.*\d))(?=.*[a-zA-Z](?=.*[a-zA-Z])).{5,}$/’; if(!preg_match($pattern, $this->$attribute))
$this->addError($attribute, ‘your password is not strong enough!’);
}
刚才创建的方法需要两个参数:
* $attribute 需要验证的属性
* $params 在规则中自定义的参数
在模型的 rules 方法中我们验证的是 password 属性,所以在验证规则中需要验证的属性值应该是 password.
在 rules 方法中我们还设置了自定义的参数 strength,它的值将会放到 $params 数组中.
你会发现在方法中我们使用了 CModel::addError().
添加错误接受两个参数:第一个参数是在表单中显示错误的属性名,第二个参数时显示的错误信息 。 2.单独的验证器类
首先要做的是创建类文件.最好的方法时类的文件名和类名相同,可以使用 yii 的延迟加载(lazy loading)功能。
让我们在应用(application)的扩展(extensiions)目录(在 protected 文件夹下)下新建一个文件夹.
将目录命名为: MyValidators然后创建文件: passwordStrength.php
Java代码
class passwordStrength extends CValidator
{ public $strength; private $weak_pattern = ‘/^(?=.*[a-zA-Z0-9]).{5,}$/’;
private $strong_pattern = ‘/^(?=.*\d(?=.*\d))(?=.*[a-zA-Z](?=.*[a-zA-Z])).{5,}$/’;
protected function validateAttribute($object,$attribute)
{
// check the strength parameter used in the validation rule of our model
if ($this->strength == ‘weak’)
$pattern = $this->weak_pattern;
elseif ($this->strength == ‘strong’)
$pattern = $this->strong_pattern; // extract the attribute value from it’s model object
$value=$object->$attribute;
if(!preg_match($pattern, $value))
{
$this->addError($object,$attribute,’your password is too weak!’);
}
}
然后在模型(model)的:
Java代码 public function rules()
{
return array(
array(‘password’, ‘ext.MyValidators.passwordStrength’, ‘strength’=>self::STRONG),
);
} 由于我们直接在User AR类中添加了$repassword属性,并且它与底层数据库表之间没有对应关系,我们需要告诉模型类允许这个属性在setAttributes()被 调用时被设置。 我们的做法是将其添加到User模型类的安全属性列表中。向User::rules()数组添加下列代码:
Java代码
array(‘repassword’, ‘safe’),
我们新建的$repassword不存在对应的tbl_user表中的列,需要将其直接添加到安全属性列表。
setAttributes:
Java代码
$model->attributes=$_POST['User'];
//$model->vpnip =$_POST['User']['vpnip'];
添加了$repassword属性
Java代码
class User extends CActiveRecord
{
public $repassword; //不能是private会报错
以注册验证为例.controller
Java代码
public function actionRegister()
{
$model=new User;
if(isset($_POST['User']))
{
$model->attributes=$_POST['User'];
if($model->validate()){
….
$model->save();
Yii::app()->user->setFlash(‘register’,'Thank you for your register.’);//验证通过提示
$this->redirect(array(‘register’));
}
} $this->render(‘register’,array(
‘model’=>$model,
));
}
register.php
Java代码
YII 表单验证规则的更多相关文章
- Yii 表单验证规则---总结
Filter: 过滤,'filter'=>'trim',表示去空格 Required:必须的,表示不能为空 Match: 匹配正则,需要和pattern一起使用,定义正则表达式,'pattern ...
- 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=" ...
随机推荐
- mysql扩展库操作mysql数据库
环境搭建 启用mysql扩展库,在php.ini文件中去配置mysql扩展库 extension=php_mysql.dll 查询数据库 1.建库建表 //建库testcreate database ...
- 编程范式感想(一)——在C中进行对模板功能的实现
最近一直在看网易公开课上的编程范式的公开课,斯坦福的教授讲的真的非常到位,感觉还是要好好学习下C还有汇编,熟悉下计算机的内存机制什么的. 大家都知道关于模板或者说范式的问题,基本在很多高级语言上都有实 ...
- Windows命令行语法说明
摘自:http://lavasoft.blog.51cto.com/62575/1113234 Windows命令行语法说明 说来惭愧,用windows这么多年了,对其命令行语法看得似懂非懂, ...
- Web负载均衡的几种方式
Web负载均衡的几种实现方式 摘要:负载均衡(Load Balance)是集群技术(Cluster)的一种应用.负载均衡可以将工作任务分摊到多个处理单元,从而提高并发处理能力.目前最常见的负载均衡应用 ...
- ACdream训练赛系列のJava专场
/* * this code is made by mhy12345 * Problem: 1669 * Verdict: Accepted * Submission Date: 2015-04-21 ...
- WinterCamp 2015 总结
这次WC2015确实有很多遗憾,特别是考试的时候犯的低级错误,由于我没有看到第三题每个点输出不全可以得小分,对于又没跑出来的点,我都根本没有上交.这确实是一个很悲伤的事情,但是也给我了足够时间去反思. ...
- UOJ179 线性规划
Description 这是一道模板题. 本题中你需要求解一个标准型线性规划: 有\(n\)个实数变量\(x_1,x_2,\cdots,x_n\)和\(m\)条约束,其中第\(i\)条约束形如\(\s ...
- BZOJ 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式
Description 农夫John发现他的奶牛产奶的质量一直在变动.经过细致的调查,他发现:虽然他不能预见明天产奶的质量,但连续的若干天的质量有很多重叠.我们称之为一个"模式". ...
- keybd_event函数用法
转自不用winio,直接达到驱动级模拟键盘效果的keybd_event函数用法 键盘模拟技术是在编写游戏外挂时经常使用的技术.但是由于很多游戏采用了directinput的方式,使得发送的一般键盘消息 ...
- IAR ARM、IAR STM8、IAR MSP430共用一个IDE
转自IAR ARM.IAR STM8.IAR MSP430共用一个IDE 试了安装好多个不同版本不同编译器的IAR,终于明白不同编译器的IAR共用IDE的条件,把几个不同编译器的IAR安装在一起,共用 ...