第五天 ThinkPHP手把手快速拼接网站(五)

php中文网
发布: 2016-08-08 09:22:25
原创
1158人浏览过

      6月11日,晴天。“梅子留酸软齿牙,芭蕉分绿与窗纱。日长睡起无情思,闲看儿童捉柳花。”

  十、后台编写-续-2

        1、Login模块的login方法  ,主要是改M方法为D方法

<?php
class 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 ( '用户名或密码错误' );
			}
		}
}
登录后复制
            其中,<span>$User </span><span>=</span><span> D</span><span>(</span><span>'User'</span><span>);</span>表示<span>实例化User模型,会导入当前项目下面的Lib/Model/UserModel.class.php文件,然后实例化UserModel类,所以,实际上的代码可能和下面的等效:</span>
<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 值不为空的时候验证

     3、编写数据库表think_news

CREATE TABLE `think_news` (
  
	`id` int(11) NOT NULL AUTO_INCREMENT,
  
	`author` int(11) NOT NULL,
 
	`subject` varbinary(256) NOT NULL,
 
	`createtime` int(11) NOT NULL,
 
	`lastmodifytime` int(11) NOT NULL,
  
	`message` mediumtext NOT NULL,
  
	 PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8;
登录后复制

      5 、修改admin\Tpl\Index\index.html

智写助手
智写助手

智写助手 写得更快,更聪明

智写助手 12
查看详情 智写助手

立即学习PHP免费学习笔记(深入)”;

     修改编辑新闻按钮如下:

 <li><a class="shortcut-button" href="__URL__/news"><span> <img src="__PUBLIC__/Images/admin/icons/pencil_48.png" alt="icon" /><br />
        编辑新闻 </span></a></li>
登录后复制
      <span> 其中,'__PUBLIC__'表示</span><span>站点公共目录,<code>'__URL__'表示当前模块的URL地址

       6、在admin\Lib\Action\IndexAction.class.php中添加函数 news

function news(){
		//跳转到News控制器的index方法
		redirect(U('/News/index'),0, '编写新闻');
	}
	
登录后复制

以上就介绍了第五天 ThinkPHP手把手快速拼接网站(五),包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号