Heim  >  Artikel  >  Backend-Entwicklung  >  第五天 ThinkPHP手把手快速拼接网站(五)

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

WBOY
WBOYOriginal
2016-08-08 09:22:25994Durchsuche

      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(&#39;验证字段&#39;,&#39;验证规则&#39;,&#39;错误提示&#39;,&#39;验证条件&#39;,&#39;附加规则&#39;,&#39;验证时间&#39;),
	//验证字段:表单中的字段名称,也可以是表单中的一些辅助字段,例如验证码,重复密码等
	//验证规则:
	//错误提示:出现错误,抛出一个什么样的提示告知用户
	//验证条件:参考手册6.15 (共有0,1,2三种值)
	//附加规则:比如使用正则表达式验证,callback函数验证等,默认使用正则验证
	//验证时间:1.新增时验证 2.编辑时验证 3.全部清况下验证
	protected $_validate=array(
		array(&#39;username&#39;,		&#39;require&#39;,		&#39;用户名必须非空&#39;),
		array(&#39;username&#39;,		&#39;callback_checklen&#39;,	&#39;用户名过长或过短&#39;,	0,	&#39;callback&#39;),
		array(&#39;password&#39;,		&#39;require&#39;,		&#39;密码必须非空&#39;	),
		array(&#39;repassword&#39;,	&#39;require&#39;,		&#39;请重复输入密码&#39;		),
	//	array(&#39;password&#39;,		&#39;repassword&#39;,&#39;两次输入的密码不一致,请重新输入&#39;,		0,	&#39;confirm&#39;),
		array(&#39;verify&#39;,&#39;require&#39;,&#39;验证码必须填写!&#39;),
		array(&#39;verify&#39;,&#39;callback_checkCode&#39;,&#39;验证码错误!&#39;,0,&#39;callback&#39;),  //使用回调函数checkCode
	);
	
	//字段长度验证回调函数(ThinkPHP会自动帮我们传递参数)
	function callback_checklen($data){
		if(strlen($data)>15 || strlen($data)
           验证规则的定义是统一的规则,定义格式为:
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

     修改编辑新闻按钮如下:

 
  • icon
    编辑新闻
  •       <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教程有兴趣的朋友有所帮助。

    Stellungnahme:
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
    Vorheriger Artikel:mysql_affected_rows和mysql_num_rowsNächster Artikel:NginxV180安装与配置