3
模型中规则制定和分析

YII模型主要分为两类,一个数据模型,处理和数据库相关的增删改查。继承CActiveRecord。还有一个是表单模型,继承CFormModel。不与数据库进行交互。操作与数据模型保持一致。

先分析数据模型:

数据模型基本包括四个方法。这里有两个须要注意的地方:

1 还记得视图中有确认password选项吗?数据库中没有这一个字段,不进行处理的话。程序会报错

处理方法:声明这样变量,并将这个变量进行label映射

例如以下:

    public $password2; //
//设置标签名字与数据库字段相应
public function attributeLabels() {
return array(
'username'=>'用户名',
'password'=>'密 码',
'password2'=>'确认密码',
'user_sex'=>'性 别',
'user_qq'=>'qq号码',
'user_hobby'=>'爱 好',
'user_xueli'=>'学 历',
'user_introduce'=>'简 介',
'user_email'=>'邮 箱',
'user_tel'=>'手机号码',
);
}

2 验证规则制定:

    /*
* 实现用户注冊表单验证
* 在模型里边设置一个方法,定义详细表单域验证规则
*/
public function rules() {
return array( array('username','required','message'=>'username必填'), //username不能反复(与数据库比較)
array('username', 'unique', 'message'=>'username已经占用'), array('password','required','message'=>'密码必填'), //验证确认密码password2 要与密码的信息一致
array('password2','compare','compareAttribute'=>'password','message'=>'两次密码必须一致'), //邮箱默认不能为空
array('user_email','email','allowEmpty'=>false, 'message'=>'邮箱格式不对'), //验证qq号码(都是数字组成。5到12位之间。開始为非0信息,使用正則表達式验证)
array('user_qq','match','pattern'=>'/^[1-9]\d{4,11}$/','message'=>'qq格式不对'), //验证手机号码(都是数字。13開始,一共同拥有11位)
array('user_tel','match','pattern'=>'/^13\d{9}$/','message'=>'手机号码格式不对'), //验证学历(信息在2、3、4、5之间则表示有选择,否则没有),1正则;2范围限制
//范围限制
array('user_xueli','in','range'=>array(2,3,4,5),'message'=>'学历必须选择'), //验证爱好:必选两项以上(自己定义方法对爱好进行验证)
array('user_hobby','check_hobby'), //为没有详细验证规则的属性,设置安全的验证规则。否则attributes不给接收信息
array('user_sex,user_introduce','safe'),
);
} /*
* 在当前模型里边定义一个方法check_hobby对爱好进行验证
*/
function check_hobby(){
//在这种方法里边,我们能够获得模型的相关信息
//$this -> 属性名; //调用模型对象的相关属性信息
//$this 就是我们在控制器controller里边实例化好的模型对象 $len = strlen($this -> user_hobby);
if($len < 3)
$this -> addError('user_hobby','爱好必须选择两项或以上');
}

还有没有别的验证规则?

有的,见下图:

表单模型:主要用于收集用户信息。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYnV5aW5nZmVpODg4OA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

整个过程:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYnV5aW5nZmVpODg4OA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

在组件中的改动:

就此OK。

YII用户注冊和用户登录(三)之模型中规则制定和分析的更多相关文章

  1. YII用户注冊和用户登录(二)之登录和注冊在视图通过表单使用YII小物件并分析

    2 登录和注冊在视图通过表单使用YII小物件并分析 <?php $form = $this -> beginWidget('CActiveForm', array( 'enableClie ...

  2. YII用户注冊和用户登录(五)之进行session和cookie分析 ,并在前后区分session和cookie

    5 进行session和cookie分析 ,并在前后区分session和cookie: 记住登录状态 这样下次再登录站点的时候.就不用反复输入username和password. 是浏览器的cooki ...

  3. struts2学习笔记(三)—— 在用户注冊程序中使用验证框架

    实现目标:       1.使用验证框架对用户注冊信息进行验证       2.验证username.password.邮箱不能为空       3.验证username.password长度     ...

  4. 基于Servlet、JSP、JDBC、MySQL的一个简单的用户注冊模块(附完整源代码)

    近期看老罗视频,做了一个简单的用户注冊系统.用户通过网页(JSP)输入用户名.真名和password,Servlet接收后通过JDBC将信息保存到MySQL中.尽管是个简单的不能再简单的东西,但麻雀虽 ...

  5. WordPress改动新用户注冊邮件内容--自己定义插件

    有些开放用户注冊功能的WordPress站点,可能有这么一项需求,就是用户注冊成功后,系统会分别给站点管理员和新用户发送一封通知邮件.给管理员发送的是新用户的username和Email,给刚刚注冊的 ...

  6. Django 介绍、安装配置、基本使用、Django 用户注冊样例

    Django介绍         Django 是由 Python 开发的一个免费的开源站点框架.能够用于高速搭建高性能.优雅的站点.              DjangoMTV 的思想项目架构图 ...

  7. YII用户注冊表单的实现熟悉前台各个表单元素操作方式

    模还是必须定义两个基本方法.还有部分label标签映射为汉字,假设进行表单验证,还要定义一些验证规则: <? php /* * 用户模型 * */ class user extends CAct ...

  8. Android实战简易教程-第二十三枪(基于Baas的用户注冊和登录模块实现!)

    接着上两篇文章.我们基于Bmob提供的API实现用户登录功能.总体看一下代码. 1.注冊页面xml: <RelativeLayout xmlns:android="http://sch ...

  9. JSP_tomcat_mysql_注冊验证用户;

    本文出自:http://blog.csdn.net/svitter 资源下载: github: git clone https://github.com/Svtter/JSP-tomcat-mysql ...

随机推荐

  1. 【DP悬线法】奶牛浴场

    虽然还是悬线法,但是这道题可不能轻易地套模板了,而是要换一种思路,横着扫一遍,竖着扫一遍,时间复杂度依旧是O(n^2),然而空间复杂度有一定的优化 如果用原来的方法,显然时间空间都会炸(如果你想用ma ...

  2. Android Studio项目中有用文件与可忽略文件(初学者)

    可通过Settings --> Version Control --> Ignored Files进行设置或察看: 支持指定文件或文件夹,也支持匹配模式. Android Studio 中 ...

  3. Android_方向传感器

    Android方向传感器小案例,主要代码如下: package com.hb.direction; import android.app.Activity; import android.conten ...

  4. VMWare虚拟机移动

    1.  背景: 虚拟机:VM3 原安装路径:C:\Users\Administrator\Documents\Virtual Machines 移动到目标路径:D:\Virtual Machines ...

  5. ASP.NET MD5加密

    protected void Button1_Click(object sender, EventArgs e) { string pwd = TextBox2.Text.Trim(); Respon ...

  6. H5-data属性的一个问题

    关于前端存数据的问题,前面写过一个博客:前端页面存取数据 看个例子: <!DOCTYPE html> <html lang="en"> <head&g ...

  7. UIAutomator定位简介

    UIAutomator元素定位是 Android 系统原生支持的定位方式,虽然与 xpath 类似,但比它更加好用,且支持元素全部属性定位.定位原理是通过android 自带的android uiau ...

  8. 【剑指Offer】40、数组中只出现一次的数字

      题目描述:   一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字.要求时间复杂度为O(n),空间复杂度为O(1).   解题思路:   这道题目相对比较难 ...

  9. 6.2 C# 2:利用 yield 语句简化迭代器

    class Program { static void Main(string[] args) { object[] values = new object[] { "a", &q ...

  10. GDB调试工具、动态加载、内存管理(day04)

    一.程序中的错误处理 在系统中定义了一个全局变量errno.在这个全局变量中存放着系统调用或者库函数出错的信息(错误编号).然后根据错误编号获取错误信息. 举例说明: 打开一个文件,如果这个文件不存在 ...