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。
public function rules()
{
return array(
{
return array(
array(‘username’, ‘required’),
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’),
);
}
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’),
);
}