ThinkPHP3.2.3框架学习步骤-框架部署-控制器使用-引入模板view-配置-Model操作-模板操作-全局函数

  • 1,491

安装部署:

ThinkPHP3.2.3完整版

ThinkPHP3.2.3框架学习步骤-框架部署-控制器使用-引入模板view-配置-Model操作-模板操作-全局函数

解压文件

  1. 得到ThinkPHP目录(只要这个就可以)
  2. ThinkPHP可以放在任意目录(不一定非要www下)
  3. 建立项目, 如shop , cms, blog等

项目目录下,创建index.php内容如下:

<?php
// 应用入口文件
//phpinfo();exit;
// 检测PHP环境
if(version_compare(PHP_VERSION,'5.3.0','<'))  die('require PHP > 5.3.0 !');

// 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false
define('APP_DEBUG',True);

// 定义应用目录
define('APP_PATH','./');

// 引入ThinkPHP入口文件
require '../ThinkPHP/ThinkPHP.php';

// 亲^_^ 后面不需要任何代码了 就是如此简单

完成如上配置以后,在地址栏运行index.php

: )

欢迎使用 ThinkPHP!

成功后,自动生成了如下目录

ThinkPHP3.2.3框架学习步骤-框架部署-控制器使用-引入模板view-配置-Model操作-模板操作-全局函数

Common // 库,类等可以在这儿

Home // controll model view 都在这儿

Runtime //运行时生成的文件

创建新模块

什么是模块:

1个网站,常见前台, admin后台,二者功能,css,图片等,都差的很大.开发时,为了清晰,可以分为2个模块来管理.

直接复制一份Home模块

并重命名为Admin

修改Admin/controller/indexController 的命名空间

PHP namespace Home\Controller; 修改为 php namespace Admin\Controller; 地

址栏访问 /index.php/Admin/Index/index

控制器的使用

地址栏URL如何调用控制器

例:

http://shop.com/index.php/home/index/hello

http://shop.com/index.php/home模块/index控制器/hello方法

访问的是Home模块下的IndexController的方法

如果需要传参数

http://shop.com/index.php/home模块/index控制器/hello方法/id/3/price/9

每一个模块  Admin/Home 都有自己的控制器,放在模块下的Controller目录下

控制器的名称

文件名:控制器名+Controller.class.php     例如:UserController.class.php  [大驼峰规则]

控制器类叫什么?继承自谁?命名空间叫什么?

<?php
namespace Home\Controller;
use Think\Controller;
class UserController extends Controller {
    public function reg(){
        echo '准备注册';
    }
}
  • 类名和文件名一样,本例:UserController
  • 继承自:\Think\Controller
  • 自身的空间叫什么?namespace和目录一致  示例:Home模块下的User控制器

引入模板view

模板放在自身控制器模块的view下

示例:

控制器方法:index.php/home/User/reg

对应模板: /home/view/User/reg.html

Model

项目/模块/Model目录下

Home模块的Model在  /Home/Model/目录下

Model类的文件名:GoodsModel.class.php  对应的数据库表名goods表进行操作

注意:虽然Model类首字母大写(遵循大驼峰风格)但是数据库表名一律小写

继承自谁?

namespace Home\Model

use \Think\Model

class GoodsModel extends Model {
}

在控制器Controller里如何实例化?

new\模块名\Model\Modelname();

示例:

new \Home\Model\UserModel();

也可以通过快捷函数D('模块名'),示例

D('User')

注意:

上述实验,都会失败。因为没有配置数据库信息。失败后去创建商品表跟数据表,就可以了

CREATE TABLE  goods (
 goods_id int(10) unsigned NOT NULL AUTO_INCREMENT,
 goods_sn char(15) NOT NULL DEFAULT '' ,
 cat_id smallint(6) NOT NULL DEFAULT 0,
 brand_id smallint(6) NOT NULL DEFAULT 0,
 goods_name varchar(60) NOT NULL DEFAULT '' ,
 shop_price decimal(9, 2) NOT NULL DEFAULT 0.00,
 market_price decimal(9, 2) NOT NULL DEFAULT 0.0,
 goods_number smallint(6) NOT NULL DEFAULT 11,
 click_count mediumint(9) NOT NULL DEFAULT 0,
 goods_weight decimal(6, 3) NOT NULL DEFAULT 0.000,
 goods_brief varchar(100) NOT NULL DEFAULT '' ,
 goods_desc text NOT NULL,
 thumb_img varchar(100) NOT NULL DEFAULT '' ,
 goods_img varchar(100) NOT NULL DEFAULT '' ,
 ori_img varchar(100) NOT NULL DEFAULT '' ,
 is_on_sale tinyint(4) NOT NULL DEFAULT 1,
 is_delete tinyint(4) NOT NULL DEFAULT 0,
 is_best tinyint(4) NOT NULL DEFAULT 0,
 is_new tinyint(4) NOT NULL DEFAULT 0,
 is_hot tinyint(4) NOT NULL DEFAULT 0,
 add_time int(10) unsigned NOT NULL DEFAULT 0,
 last_update int(10) unsigned NOT NULL DEFAULT 0,
PRIMARY KEY ( goods_id ) ,
UNIQUE KEY  goods_sn ( goods_sn )
) ENGINE=MyISAM CHARSET=utf8;
CREATE TABLE  cat (
 cat_id int(11) NOT NULL AUTO_INCREMENT,
 cat_name varchar(20) NOT NULL DEFAULT '' ,
 intro varchar(100) NOT NULL DEFAULT '' ,
 parent_id int(11) NOT NULL DEFAULT 0,
 PRIMARY KEY ( cat_id )
) ENGINE=MyISAM CHARSET=utf8;

区别

D(),M()函数都能得到Model的实 例,

D函数是优先得到子类的Model实例

M函数得到父类的Model实例,即\Think\Model类的实例

配置

配置文件在哪儿?

TP框架自带的配置文件 :

/ThinkPHP/Conf/convention.php

项目的配置文件 :

例项 目在 /www/shop下,则项 目配置为:

/www/shop/Common/Conf/config.php

模块的配置文件 :

例Home模块 ,配置文件 为:

/www/shop/Home/conf/config.php

文件的优先级

注 意:配置文件 选项 都是一样的,越小的配置文件优先级级越高

在本例中 ,同样的配置选项 ,则:

模块的选项 --覆盖-->项目同名配置--覆盖-->框架的同名配置

常用配置项

数据库选项

<?php
return array(
	//'配置项'=>'配置值'
        /* 数据库设置 */
    'DB_TYPE'               =>  'mysql',     // 数据库类型
    'DB_HOST'               =>  'localhost', // 服务器地址
    'DB_NAME'               =>  'test',          // 数据库名
    'DB_USER'               =>  'root',      // 用户名
    'DB_PWD'                =>  '12345678',          // 密码

);

调试选项 :

项目的入口页面,一般是index.php

define('APP_DEBUG' , true); //开启debug模式

// 记录日志
'LOG_RECORD'            =>  true,   // 默认不记录日志
'DB_SQL_LOG'            =>  true, // SQL执行日记记录

Model操作

新增数据

对于TP的Model,支持2种风格 的操作

1:面向过程风格

<?php 
namespace Home\Model;
use Think\Model;
class XxxModel extends Model{
	public function papa(){
		$arr = array('name'=>'张三','age'=>'28','xb'=>'男');
		$this->add($arr);
	}
}
?>

2: 面向对象风格 :

$model->属性 名 = 属性 值

$model->add();

例:

$m->name = 'lisi';
$m->email = 'lisi@qq.com';
var_dump($m->add());//检测属性为空自动调用__set方法,成功后 返回的是主键的值

查询数据

    public function cha(){
        $xxxModel = D('Xxx');
        //var_dump($xxxModel->find('1'));
        //var_dump($xxxModel->field('name,age')->where('id<4')->find());
        var_dump($xxxModel->field('id,name,age')->where('id<4')->order('age desc')->limit(1,2)->select());
        //取出那几列?条件?排序?之间?查询
    }

更改数据

    public function up(){
        $xxxModel = D('Xxx');
        $arr = array('name'=>'大鸭梨');
        var_dump($xxxModel->where('id=1')->save($arr));
    }

删除数据

var_dump($model->delete(4)); //按主键来删除 where cat_id=4
var_dump($model->delete('3,4,5,6'));  // where cat_id in (3,4,5,6);
var_dump($model->where('cat_id=2')->delete()); // where cat_id=2;

模板操作

assign赋值

$this->assign('title','开拓者博客[15063.com]');
$this->assign('bests',$bests);//$bests是二维数组,跟smarty相似

变量输出

在Html代码中输出标题如下:

<title>{$title}</title>

注意:TP的模板标签和smarty稍有不同

TP在 控制结构/循环/if/else时,用<>

而最具体的输出变量用{$标签}

以下直接演示控制跟view针对:if/else 三元运算 数组循环 方法!

其中包涵:

import导入CSS,JS文件

import 标签,以APP/Public为起点   ,导入css,js

<import type="css" file="a.b.c" />

则导入

APP/Public/a/b/c.css

load导入css,js

例:

<load href="__PUBLIC__/Js/Common.js" />

则导入

APP/Public/Js/Common.js
<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
    public function index(){
        /*$this->show('<style type="text/css">*{ padding: 0; margin: 0; } div{ padding: 4px 48px;} body{ background: #fff; font-family: "微软雅黑"; color: #333;font-size:24px} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.8em; font-size: 36px } a,a:hover{color:blue;}</style><div style="padding: 24px 48px;"> <h1>:)</h1><p>欢迎使用 <b>ThinkPHP</b>!</p><br/>版本 V{$Think.version}</div><script type="text/javascript" src="http://ad.topthink.com/Public/static/client.js"></script><thinkad id="ad_55e75dfae343f5a1"></thinkad><script type="text/javascript" src="http://tajs.qq.com/stats?sId=9347272" charset="UTF-8"></script>','utf-8');*/
echo "home";
    }
/*if  else标签
    public function ve(){
    	$a = mt_rand(3,6);
    	$this->assign('rand',$a);
    	$this->display();
    }*/

/*三元运算符
    public function ve(){
    	$a = mt_rand(3,6);
    	$this->assign('rand',1);
    	$this->display();
    }*/
    

	//数组循环
    public function ve(){
    	//$a = mt_rand(3,6);
    	$a = array(
    		array('id'=>1,'title'=>'我是醉了'),
    		array('id'=>2,'title'=>'我真醉了'),
    		array('id'=>3,'title'=>'我也是醉了'),
			);

    	$this->assign('rand',$a);
    	$this->display();

		}
	}
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title></title>
	
<!--     <import type="css" file="css" />
<import type="js" file="js" /> -->
	<load href="__PUBLIC__/js.js" />
	
</head>
<body>
    <!-- if  else标签
	<h1><if condition="$rand eq 5">及格<else />不及格</if></h1> -->


	<!-- 三元运算符 为trun  ?1  否则folse
	{$rand?'1':'bushi1111111111'} -->

	<!-- 	数组循环 -->
	<foreach name="rand" item="i">
	<li>
		{$i.title}
	</li>
	</foreach>
	
</body>
</html>

模板包含

一般在模块下的view中,建立Public ,里面放置公共模板.

如:

/View/Home/Public/

header.html

footer.html

 

<include file="Public/模板名(不含后缀)" />

例:包涵Home/View/Public/header.html:

<include file="Public/header" />

不要让模板做太多工作

功能:输出数据,而非处理数据

应该由控制器来处理

全局函数

M函数

TP的Model父类,封装的功能比较多,增删改查操作都具备.

一些表,比如留言表,comment

class CommentModel extends Model {

}

M('comment') 的作用就是得到父类Model的对象,

且把Model的表名---指向-->comment

D函数

D函数也可实例自定类Model

优先实例自定义的子类Model,

如果子类Model不存在 ,则功能等同于M()的函数.

如果有自定义的类,也可以用D()来导入

比如:

/Home/
    /Pay
        AliPay.class.php
        TenPay.class.php
$ali = new \Home\Pay\AliPay();
$ali = D("Ali","Pay");

D函数跨模块调用Model

如果:在 Admin模块下,调用 Home模块下的GoodsModel

D('Home/Goods')

U函数

    public function uu(){
    	var_dump(U('admin/index/uu',array('id'=>3)));
    }
{:U('admin/index/uu',array('id'=>3))}

实例:

<foreach name="cats" item="c">
<tr>
    <td>{$c.cat_id}</td>
    <td>{$c.catname}</td>
    <td>{$c.parent_id}</td>
    <td>
        大栏目<a href="{:U('Home/Index/index' , array('cat_id'=>$c[cat_i
d]))}">编辑</a>
    </td>
 </tr>
 </foreach>

C()函数

读取和设置配置选项的函数

例:

echo C('URL_PATHINFO_DEPR');
C('URL_PATHINFO_DEPR' , '-');
echo C('URL_PATHINFO_DEPR');

I()函数

防止XSS攻击和sql注入,所做的过滤函数.

如:

index.php?title=<div>
I('get.title') --输出--> &lt;div&gt; //防止XSS攻击
I('post.email') --输出-- 转义并过滤html标签后的email内容.

 

weinxin
我的微信
这是我的微信扫一扫
开拓者博主
  • 本文由 发表于 2016年12月18日22:15:01
  • 转载请务必保留本文链接:https://www.150643.com/421.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: