yii模型规则的简单使用以及开启前端的验证(七)

之前博客里有过一次小物件的使用,不错没有结合model验证,今天就结合model来做一下前台表单的验证吧,带你先简单的了解下model里的一些方法,详细的等我研究深了再来写过来哈。

1.首先,model的生成的话 ,使用 gii生成就可以了,至于gii的使用,在之前已经提过了,可以往前翻一下,输入表名作为model名就可以了。

我想说下里面的几个方法是做什么用的。

public static function model($className=__CLASS__)
    {
        return parent::model($className);
    }

这个就不详细说了,直接略过,毕竟是自动生成的,你也不用做任何修改,其实就是集成父类model

public function tableName()
    {
        return ‘{{user}}‘;
    }

这个的作用就是返回表名  里面的user 代表的就是user表了。

    public function search()
    {
        // Warning: Please modify the following code to remove attributes that
        // should not be searched.

        $criteria=new CDbCriteria;
        $criteria->compare(‘username‘,$this->username);$criteria->compare(‘userpwd‘,$this->userpwd,true);
       return new CActiveDataProvider($this, array(
            ‘criteria‘=>$criteria,
        ));
    }

上面方法是设置查询字段,需要哪个数据库字段作为数据库查询条件,就把他按照格式写出来就可以了

public function rules()
    {
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.
        return array(
            array(‘username, userpwd‘, ‘required‘,‘message‘=>‘用户名,密码必填‘),                 //代表这俩字段必填
            array(‘price, apply_version‘, ‘length‘, ‘max‘=>10),      //代表这俩字段的最大长度都是40
            array(‘end_time‘, ‘safe‘),                               //代表 正确的时间
            // The following rule is used by search().
            // Please remove those attributes that should not be searched.
            array(‘username, userpwd,‘, ‘safe‘, ‘on‘=>‘search‘),      //代表username,userpwd 可以作为查询条件
        );
    }

上面这个则是验证规则,验证字段是否符合系统需要的条件,就好像前端的js的效果一样的,其实yii的验证组件很多很多,一会我放到文章的后面 给大家都列出来把。

public function attributeLabels()
    {
        return array(
            ‘password‘ => ‘原密码‘,
            ‘password1‘ => ‘新密码‘,
            ‘password2‘ => ‘确认新密码‘,

        );
    }

这个是对字段进行重命名,重命名的字段可以通过小物件的形式显示在前台中,需要注意的是有一种情况就是,可能有的字段他在数据库表中是不存在的,比如说password1,password2这样的字段,一般人是不会存在数据库的,所以要创建个模拟的字段,怎么创建呢,在model上方定义一下就可以了,如图:

看到了把 如上图所示,数据库表里没有的字段都需要定义一下,按照我图片里那样的来就可以了哦,既然说到这里,我就接着说 怎么样结合view,controller把rules里的判断和attributesLabeles里定义好的标签名显示出来,并且能判断输入的数据是否符合格式呢,来先从 controller开始

上面这是对应的controller,我想你应该会建把 然后 方法叫actionPasswd

$userModel = User::model(); //引入你的model

然后判断model是否存在

然后$userModel->arributes=$_POST[‘User‘];//接收前台传来的所有值

$userModel->validate();  //执行model的数据验证

有了 这个最后别忘记 view里的小物件,我估计你会写了已经 ,我给你截个图 你参考下吧

LabelEx就是输出model里对应的标签值

关于labelEx里的参数第一个是模型名,第二个是对应的字段名 ,就是你在arributesLabels里定义的名字。

-----------------------------------------------------------------------------------------------------------------------------------------------------

再说2个非常常用的把 就是你们一定会用到的,一个是比如登录注册或者修改密码这,把错误信息输出,对吧,怎么把错误信息输出到页面呢

就是利用model里的rules规则里的message了,如果不符合规则,则会将message显示到页面中了,view中怎么显示呢 ,这么显示

<?php echo $form->error(UserModel,‘username‘)?>这样就可以将rules里的规则 用到用户名那了,其他的字段以此类推哦,都是 model配置对应字段的message,前台根据model里对应的字段名 在前台进行输出。

还有个常见的就是判断2次输入的密码是否相同 这个再每个系统里基本都有,怎么验证呢 ,view里不变 引入error就行,

model需要动一下 ,这么写

写到rules里还是 意思是 password2 和 password1 相比较必须相同,否则message提示 确认密码必须一致。

最后再说个 自定义的model

比如说判断原密码 是否正确,这个就要走数据库了,这里就要用到自定义方法了

在model里还是写在rules方法里

array(‘username‘,check_pwd);

然后下面就写个check_pwd方法被

public function check_pwd(){

$userInfo=$this->find(‘username=:name‘,array(‘:name‘=>Yii::app()->user->name))  //一般修改密码都是登录后修改所以这里的name指的是当前登录用户的用户名,根据用户名查询当前用户的密码是多少。

if  ($this->password!=$userInfo->password){          $this->password就是用户输入的原密码了      $userinfo->password就是数据库查出来得当前用户的密码了,一判断 完事

$this->addError(‘password‘,‘原密码错误‘);

}

}

最后 我把 yii 的model 里的rules一些规则附上,你们遇到相对应的验证 直接拿来用下:

规则列表
 in: 确保数据在一个预先指定的值的范围之内。
lengths 确保数据的长度在一个指定的范围之内。
match: 确保数据可以匹配一个正则表达式。
numerical: 确保数据是一个有效的数字。
required: 确保特性不为空。
 type: 确保特性是指定的数据类型。
 unique: 确保数据在数据表的列中是唯一的。
 url: 确保数据是一个有效的 URL。
boolean: 确保特性有一个布尔值。
captcha: 确保特性值等于 CAPTCHA 中显示的验证码。
compare: 确保特性等于另一个特性或常量。
email: 确保特性是一个有效的Email地址。
default: 指定特性的默认值。
exist: 确保特性值可以在指定表的列中可以找到。
file: 确保特性含有一个上传文件的名字。
filter : 通过一个过滤器改变此特性。

这些要牢记哦 !

额 最后再多嘴一句哈,刚才的model验证每次都要刷新才可以的,你可以每次提交表单的时候试一下,看下验证为空或者 是否原密码一致这些验证之前,浏览器是否刷新了,肯定是刷新了,怎么让他不刷新了,来吧 ,在view里的小物件里改下 ,在form开始的地方改下,改成这样:

 <?php $form=$this->beginWidget(‘CActiveForm‘, array(
 ‘id‘=>‘contact-form‘,
 ‘enableClientValidation‘=>true,
 ‘clientOptions‘=>array(
 ‘validateOnSubmit‘=>true,
 ),
 )); ?>

切记开启前端js不刷新页面验证的时候,要保证controller用render不然无法引入组件相关的js库

原文地址:https://www.cnblogs.com/HoverM/p/10018180.html

时间: 2024-08-27 10:58:16

yii模型规则的简单使用以及开启前端的验证(七)的相关文章

Yii 2.0 数据库简单操作(转)

开始使用数据库首先需要配置数据库连接组件,通过添加 db 组件到应用配置实现("基础的" Web 应用是 config/web.php),DSN( Data Source Name )是数据源名称,用于指定数据库信息.如下所示: return [ // ... 'components' => [ // ... 'db' => [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=localhost;dbna

Crumpet – 使用很简单的响应式前端开发框架

Crumpet 是一个简单的响应式的基于 SASS/SCSS 的响应式前端框架,保持你的 HTML 代码简洁.内置尽量使用占位符选择器,以减少你的 HTML 标记的大小,没有凌乱的 HTML 代码.快速创建网站的布局响应式将变成一件轻而易举的事. 您可能感兴趣的相关文章 创意无限!一组网页边栏过渡动画[附源码下载] 真是好东西!13种非常动感的页面加载动画效果 你见过吗?9款超炫的复选框(Checkbox)效果 超赞!基于 Bootstrap 的响应式的后台管理模板 太赞了!超炫的页面切换动画效

yii 使用cactiveform 创建表单时候遇到的一些验证问题和使用ajax_form时重置验证规则的解决办法

yii  cactiveform 在添加验证信息的时候, 有时候稍有不慎,可能导致客户端验证不起作用,尤其是像我这种初学者来说,更是无解了, 好在今天有点时间, 一路追查这个问题,最后从js 端一直追到了php中, 终于找到了罪魁祸首,原来还是我们自己,哈哈  接下来就简单分享一下: 首先让我们来看看所有的客户端js验证是怎么添加上去的: 在CActiveForm.php :383行 中有这么一句话: $options=CJavaScript::encode($options); $cs->re

Iptables 规则 一些简单实例和详细介绍

设定规则 iptables -p INPUT DROP iptables -p OUTPUT ACCEPT iptables -p FORWARD DROP 1.防止外网用内网IP欺骗 iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP iptables -t nat -A PREROUTING -i e

隐马尔科夫模型python实现简单拼音输入法

在网上看到一篇关于隐马尔科夫模型的介绍,觉得简直不能再神奇,又在网上找到大神的一篇关于如何用隐马尔可夫模型实现中文拼音输入的博客,无奈大神没给可以运行的代码,只能纯手动网上找到了结巴分词的词库,根据此训练得出隐马尔科夫模型,用维特比算法实现了一个简单的拼音输入法.githuh地址:https://github.com/LiuRoy/Pinyin_Demo 原理简介 隐马尔科夫模型 抄一段网上的定义: 隐马尔可夫模型 (Hidden Markov Model) 是一种统计模型,用来描述一个含有隐含

原始(prototype)模型模式之简单形式与登记形式

原始模型模式有两种表现形式:第一种是简单形式,第二种是登记形式,下面将分别讲解两种原型模型模式的不同实现. 简单形式的原始模型模式 uml类图为: 这种形式涉及到三种角色: *客户(Client)角色:客户类提出创建对象的请求. *抽象原型(Prototype)角色:这是一个抽象角色,通常由一个Java接口或者java抽象类实现. *具体原型(Concrete Prototype)角色:被复制的对象. 以下是一个简单的原型模型的实现. Client: package prototype.prot

对于TCP协议中IOCP模型的一些简单的理解

请不要觉得这一篇没有代码的文章没意义,对IOCP模型的代码,百度搜索可以得到很多,但是后续很多需要纠结的地方,很多人都经历过,如果你已经在尝试写IOCP服务端了,那么你很可能会对写代码之外的一些设计问题很纠结,那么本文很可能是对你有所帮助的,这一个帖子是我开的讨论帖,我不是很懂CSDN的帖子分数的意义,我觉得那对于我这种1年难得发1贴的人来说估计也没什么作用,但我很希望大家能一起参与进来讨论:http://bbs.csdn.net/topics/390890567?page=1#post-398

TCP/IP模型的一个简单解释

TCP/IP模型是互联网的基础. 想要理解互联网,就必须理解这个模型.但是,它不好懂,我就从来没有搞懂过. 前几天,BetterExplained上有一篇文章,很通俗地解释了这个模型.我读后有一种恍然大悟的感觉,第一次感到自己理解了互联网的总体架构. 下面,我按照自己的理解,写一下互联网到底是怎么搭建起来的.说得不对的地方,欢迎指正. 什么是TCP/IP模型? TCP/IP模型是一系列网络协议的总称,这些协议的目的,就是使计算机之间可以进行信息交换. 所谓"协议"可以理解成机器之间交谈

Django2_MVC(MTV)模型、常用简单命令、项目目录文件说明及static静态文件

一.MVC.MTV模型著名的MVC模式:所谓MVC就是把web应用分为模型(M),控制器(C),视图(V)三层:他们之间以一种插件似的,松耦合的方式连接在一起.模型负责业务对象与数据库的对象(ORM),视图负责与用户的交互(页面),控制器(C)接受用户的输入调用模型和视图完成用户的请求.Django的MTV模式本质上与MVC模式没有什么差别,也是各组件之间为了保持松耦合关系,只是定义上有些许不同,Django的MTV分别代表:Model(模型):负责业务对象与数据库的对象(ORM)Templat