YII 1.0模型标签与验证规则,前后台验证
model Admin.php
model(),tabName()是固定格式
<?php
/* 管理员模型
* --------------------------------------------
* @auther haoxiang
* --------------------------------------------
* @time 2015/8/3
*/
class Admin extends CActiveRecord{
public $password1;
public $password2;
public static function model($className = __CLASS__){
return parent::model($className);
}
public function tableName(){
return "{{admin}}";
}
/*
标签名字
*/
public function attributeLabels(){
return array(
'password' => '原始密码',
'password1' => '新密码',
'password2' => '确认密码'
);
}
/*
* 验证规则
* required 的字段就会有小星号表示必须
*/
public function rules(){
return array(
array('password','required', 'message'=>'原始密码必填'),
array('password1','required', 'message'=>'新密码必填'),
array('password2','required', 'message'=>'确认密码必填'),
array('password2','compare', 'compareAttribute'=>'password1','message'=>'两次密码不一致'),
array('password','check_password'),
);
}
/*
* 自定义验证规则
*/
public function check_password(){
$user = Yii::app()->user->name;
$userinfo = Admin::model()->find('username = :name',array(':name'=>$user));
if(md5($this->password) != $userinfo['password']){
$this->addError('password','用户名或密码错误');
}
}
}
在模板中的使用
<?php $form=$this->beginWidget('CActiveForm', array('enableClientValidation'=>true, 'clientOptions'=>array('validateOnSubmit'=>true))); ?>
<table class="table">
<tr>
<td class="th" colspan="10">修改密码</td>
</tr>
<tr>
<td>用户</td>
<td><?php echo Yii::app()->user->name ?></td>
</tr>
<tr>
<td><?php echo $form->labelEx($Admin, 'password') ?></td>
<td>
<?php echo $form->passwordField($Admin, 'password') ?>
<?php echo $form->error($Admin, 'password') ?>
</td>
</tr>
<tr>
<td><?php echo $form->labelEx($Admin, 'password1') ?></td>
<td>
<?php echo $form->passwordField($Admin, 'password1') ?>
<?php echo $form->error($Admin, 'password1') ?>
</td>
</tr>
<tr>
<td><?php echo $form->labelEx($Admin, 'password2') ?></td>
<td>
<?php echo $form->passwordField($Admin, 'password2') ?>
<?php echo $form->error($Admin, 'password2') ?>
</td>
</tr>
<tr>
<td colspan="10">
<input type="submit" class="input_button" value="修改" />
</td>
</tr>
</table>
<?php $this->endWidget() ?>
控制器
<?php
/*
后台用户模块
*/
class UserController extends Controller{
public function actionPasswd(){
$Admin = new Admin(); //加载模型
if(isset($_POST['Admin'])){
$Admin->attributes = $_POST['Admin'];
if($Admin->validate()){
//$Admin->addError('password','未知错误');
$userinfo = $Admin->model()->find('username = :name',array(':name'=>Yii::app()->user->name)); $password = md5($_POST['Admin']['password1']);
$result = $Admin->model()->updateByPk($userinfo->id,array('password'=>$password));
if($result){
Yii::app()->user->setFlash('success','修改成功');
}
}
}
$this->render('passwd',array('Admin'=>$Admin));
}
}
开启前台异步验证
<?php $form=$this->beginWidget('CActiveForm', array('enableClientValidation'=>true, 'clientOptions'=>array('validateOnSubmit'=>true))); ?>
规则列表
• boolean: 确保特性有一个布尔值。
• captcha: 确保特性值等于 CAPTCHA 中显示的验证码。
• compare: 确保特性等于另一个特性或常量。
• email: 确保特性是一个有效的Email地址。
• default: 指定特性的默认值。
• exist: 确保特性值可以在指定表的列中可以找到。
• file: 确保特性含有一个上传文件的名字。
• filter : 通过一个过滤器改变此特性。
• in: 确保数据在一个预先指定的值的范围之内。
• lengths 确保数据的长度在一个指定的范围之内。
• match: 确保数据可以匹配一个正则表达式。
• numerical: 确保数据是一个有效的数字。
• required: 确保特性不为空。
• type: 确保特性是指定的数据类型。
• unique: 确保数据在数据表的列中是唯一的。
• url: 确保数据是一个有效的 URL。
{
return array(
array(‘username’, ‘length’, ‘min’=>3, ‘max’=>12),
array(‘password’, ‘compare’, ‘compareAttribute’=>’password2′, ‘on’=>’register’),
array(‘password’, ‘authenticate’, ‘on’=>’login’),array(‘Price’,’numerical’, ‘integerOnly’=>true),
array(‘title, content, status’, ‘required’),
array(‘title’, ‘length’, ‘max’=>128),
array(‘status’, ‘in’, ‘range’=>array(1,2,3)),
array(‘tags’, ‘match’, ‘pattern’=>’/^[\w\s,]+$/’,‘message’=>’Tags can only contain word characters.’),
array(‘tags’, ‘normalizeTags’),
array(‘title, status’, ‘safe’, ‘on’=>’search’),
);
}
YII 1.0模型标签与验证规则,前后台验证的更多相关文章
- MVC验证05-自定义验证规则、验证2个属性值不等
原文:MVC验证05-自定义验证规则.验证2个属性值不等 本文体验2个属性值不等.即当一个属性输入值,另外一个属性输入的值不能和第一个属性值相等.相关文章包括: MVC验证01-基础.远程验证 M ...
- 对Yii 2.0模型rules的理解(load()无法正确装载数据)
在实际开发中,遇到数据表新增字段而忘记了在对应模型中rules规则中添加新增的字段,而导致load()方法装载不到新增字段,导致新增字段无法写入数据库中. 解决办法:在新增字段后及时在对应模型ru ...
- laravel5.5 自定义验证规则——手机验证RULE
相信很多小伙伴和我一样烦恼,laravel没有自带手机号的验证,每次验证手机号都要写正则这类的规则,每次都是repeat yourself!违背了编码的一个原则,就是Don't repeat your ...
- Sping POJO中如何添加验证规则和验证消息提示
1.示例,验证规则和错误提示作为注解写在声明变量的地方 @NotNull private long id; @NotNull @Size(min = 2, max = 30,message=" ...
- ASP.NET MVC验证 - 自定义验证规则、验证2个属性值不等【待验证】
提示:保存后才提示错误信息 自定义验证特性,继承ValidationAttribute并实现IClientValidatable 这次重写了基类的IsValid()方法的另外一个重载,因为该重载包含了 ...
- ThinkPhp5.0模型验证规则
Tp5提供了模型数据规则的验证功能,用于在数据save或者update前验证数据的有效性.Tp5提供校验规则的类为\Think\Validate,默认提供的校验规则可以查看该文件. 在Model文件中 ...
- [Asp.net MVC]Asp.net MVC5系列——在模型中添加验证规则
目录 概述 在模型中添加验证规则 自定义验证规则 伙伴类的使用 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net MVC5 ...
- Thinkphp 1.验证规则 2.静态定义 3.动态验证
一.验证规则 数据验证可以对表单中的字段进行非法的验证操作.一般提供了两种验证方式: 静态定 义($_validate 属性)和动态验证(validate()方法). //验证规则 array( ar ...
- easyui的validatebox重写自定义验证规则的几个实例
validatebox已经实现的几个规则: 验证规则是根据使用需求和验证类型属性来定义的,这些规则已经实现(easyui API): email:匹配E-Mail的正则表达式规则. url:匹配URL ...
随机推荐
- 简单的js实现网页时钟
js实现时钟. <div id="clock"></div> <script type="text/javascript"> ...
- css居中
<html><head lang="en"> <meta charset="UTF-8"> <title>< ...
- HDU 2485 Destroying the bus stations
2015 ACM / ICPC 北京站 热身赛 C题 #include<cstdio> #include<cstring> #include<cmath> #inc ...
- Python大神成长之路: 第一次学习记录
一.Python发展史 二.Python2 or 3 博主选择了Python3. 从官网下载Python www.python.org Windows安装python3.5.python2.7.安装 ...
- C++多线程二
SuspendThread()暂停一个线程,ResumeThread()重启一个线程.参数均为线程的句柄. #include <iostream> #include <windows ...
- 关于有限状态机FSM同步复位的问题
FSM通常情况下使用异步信号进行复位,如FSM1中的rst_n信号.当rst_n信号为低时,FSM进入空闲状态IDLE. 在某些特殊情况下有可能需要跟随某个外部信号强制切换到空闲状态,也即同步复位.下 ...
- HTTP Request header
HTTP Request header HTTP协议详解 - 小坦克 - 博客园 HTTP Request header 当今web程序的开发技术真是百家争鸣,ASP.NET, PHP, JSP,Pe ...
- CodeForces 617D Polyline
无脑暴力判断. #include<cstdio> #include<cstring> #include<vector> #include<cmath> ...
- WebRequest调用
WebRequest支持不同的浏览器对象,可以在底层使用不同的XMLHttpRquest方式调用Web服务. Time.aspx <%@ Page Language="C#" ...
- Nginx + Apache 反向代理
反向代理负载均衡 使用代理服务器可以将请求转发给内部的Web服务器,使用这种加速模式显然可以提升静态网页的访问速度.因此也可以考虑使用这种技术,让代理服务器将请求均匀转发给多台内部Web服务器之一上, ...