6月11日,晴天。“梅子留酸软齿牙,芭蕉分绿与窗纱。日长睡起无情思,闲看儿童捉柳花。”
十、后台编写-续-2
1、改写Login模块的login方法 ,主要是改M方法为D方法
<?phpclass LoginAction extends Action {function index() {// 配置页面显示内容$this->assign ( 'title', '后台管理系统' );$this->display ();}// 用户登录页面function login() {header ( "Content-Type:text/html; charset=utf-8" );$username=$_POST['username'];$password=md5($_POST['password']);$User = D ( "User" ); // 参数的User必须首字母大写,否则自动验证功能失效!if (! $User->create ()) {$this->error ( $User->getError () );} else {// 查找输入的用户名是否存在if ($User->where ( "username ='$username' AND password = '$password'" )->find ()) {session ( username, $username );$url = U ( '/Index/index/username/' . $username );redirect ( $url, 5, '跳转中…' );} else {$this->error ( '用户名或密码错误' );}}} D表示实例化User模型,会导入当前项目下面的Lib/Model/UserModel.class.php文件,然后实例化UserModel类,所以,实际上的代码可能和下面的等效:<span style="font-family:Comic Sans MS;font-size:14px;">import('@.Model.UserModel');$User = new UserModel();</span> 之后,create() 创建数据对象后,将自动收集提交过来的表单数据。在将表单写入数据表之前,常常会有一些对数据的检测(提交的用户名是否符合要求)与处理(如例子中的验证码的比对)。create() 方法就支持数据的自动验证与自动完成。
一般情况下,使用 M 方法实例化模型时,是无法实例化自定义模型类的,也就无法使用自动验证与自动完成功能,因此建议使用 D 方法来实例化模型类。
2、编写自定义User模型类admin/Lib/Model/UserModel.class.php
<?php/* * 自定义User模型类 * 功能:1.完成自动验证功能 */class UserModel extends Model{//自动验证成员属性(二维数组,每个数组代表一个验证规则)//array('验证字段','验证规则','错误提示','验证条件','附加规则','验证时间'),//验证字段:表单中的字段名称,也可以是表单中的一些辅助字段,,例如验证码,重复密码等//验证规则://错误提示:出现错误,抛出一个什么样的提示告知用户//验证条件:参考手册6.15 (共有0,1,2三种值)//附加规则:比如使用正则表达式验证,callback函数验证等,默认使用正则验证//验证时间:1.新增时验证 2.编辑时验证 3.全部清况下验证protected $_validate=array(array('username','require','用户名必须非空'),array('username','callback_checklen','用户名过长或过短',0,'callback'),array('password','require','密码必须非空'),array('repassword','require','请重复输入密码'),//array('password','repassword','两次输入的密码不一致,请重新输入',0,'confirm'),array('verify','require','验证码必须填写!'),array('verify','callback_checkCode','验证码错误!',0,'callback'), //使用回调函数checkCode);//字段长度验证回调函数(ThinkPHP会自动帮我们传递参数)function callback_checklen($data){if(strlen($data)>15 || strlen($data)<5){return false;}return true;}//验证码回调函数(ThinkPHP会自动帮我们传递参数)function callback_checkCode($data){if(md5($data)!=$_SESSION['verify']){return false;}return true;}//自动完成,在create时自动执行//array('填充字段','填充内容','填充条件','附加规则');//填充字段 protected $_auto=array(array('password','md5',3,'function'),array('ip','callback_returnip',1,'callback'),array('createtime','time',1,'function'),);function callback_returnip(){return $_SERVER['REMOTE_ADDR'];}}?> 验证规则的定义是统一的规则,定义格式为:array(array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]),array(验证字段2,验证规则,错误提示,[验证条件,附加规则,验证时间]),…… );说明验证字段:(必须)需要验证的表单字段名称,这个字段不一定是数据库字段,也可以是表单的一些辅助字段,例如确认密码和验证码等等。有个别验证规则和字段无关的情况下,验证字段是可以随意设置的,例如expire有效期规则是和表单字段无关的。如果定义了字段映射的话,这里的验证字段名称应该是实际的数据表字段而不是表单字段。验证规则:(必须)要进行验证的规则,需要结合附加规则,如果在使用正则验证的附加规则情况下,系统还内置了一些常用正则验证的规则,可以直接作为验证规则使用,包括:require 字段必须、email 邮箱、url URL地址、currency 货币、number 数字。提示信息:(必须)用于验证失败后的提示信息定义验证条件:(可选)包含下面几种情况:Model::EXISTS_VALIDATE 或者0 存在字段就验证(默认)Model::MUST_VALIDATE 或者1 必须验证Model::VALUE_VALIDATE或者2 值不为空的时候验证记录沿途的心情。那样的生活才是我想要的。