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 ...
随机推荐
- C#获取客服端ip和用户名
. 在asp.Net中专用属性: 获取服务器电脑名:page.server.manchinename 获取用户信息:page.user 获取客户端电脑名:page.request.userhostna ...
- 转:Windows下用sftp自动下载文件
远程服务器是Linux操作系统,没有ftp服务,可以ssh,数据库每天2:00会自动创建一个备份文件,本地计算机是windows操作系统,希望用sftp每天3:00下载远程服务器上的备份文件.本地系统 ...
- JAVA事件监听机制学习
//事件监听机制 import java.awt.*; import java.awt.event.*; public class TestEvent { public static void mai ...
- j2ee常用包的作用
1.antlr-2.7.7.jar 呵呵 一句话,没有此包,hibernate不会执行hql语句 2.aopalliance-1.0.jar 这个包是AOP联盟的API包,里面包含了针对面向切面的 ...
- Xamarin For Visual Studio 3.0.54.0 完整离线破解版
Xamarin For Visual Studio 3.0.54.0 完整离线破解版 Xamarin For Visual Studio就是原本的Xamarin For Android 以及 Xama ...
- 关于HTTP_CLIENT_IP,HTTP_X_FORWAR
HTTP_CLIENT_IP:可通过http头伪造HTTP_X_FORWARDED_FOR:可通过http头伪造REMOTE_ADDR:可能是用户真实IP也可能是代理IP 服务端获取IP地址 http ...
- linux nfs文件夹、文件共享
◆一.概念 NFS是网络文件系统(Network File System)的简称,是分布式计算机系统的一个组成部分,可实现在异构网络上共享和装配远程文件系统. NFS由SUN公司开发,目前已成为文件服 ...
- Android——apk反编译
一.工具准备: 1.dex2jar:http://code.google.com/p/dex2jar/downloads/list 2.JD-GUI:windows:http://laichao.go ...
- Socket.io官方聊天室DEMO的学习笔记
照着Socket.io官方的聊天室代码敲了一遍,遇到了一个奇怪的问题: 每次点击SEND按钮的时候,都会重新刷新页面. 在点击页面的一瞬间,看到了正在加载jquery的提示, 然后以为是jquery用 ...
- Android学习笔记之Service
与服务通信 用bindservice 而startservice并无通信条件. service 为android为系统服务,所以程序员无法new出来,只能建立服务,共其他组件使用. package c ...