thinkphp概述,thinkphp项目构建流程,thinkphp项目结构,thinkphp配置,thinkphp控制器,thinkphp模型,thinkphp视图,thinkphp的内置模板引擎。

thinkphp是一个免费开源的,快速,简单的面向对象的轻量级PHP开发框架,遵循Apache2开源协议发布,是为了web应用开发和简化企业级引用开发而诞生的。

thinkPHP的特点,环境要求等。

官方网址:

http://thinkphp.cn
复制代码

svn的下载地址: 完整版:

http://thinkphp.googlecode.com/svn/trunk
复制代码

核心版本:

http://thinkphp.googlecode.com/svn/trunk/ThinkPHP
复制代码

thinkphp遵循简单实用的设计原则,thinkphp框架思想和结构体系进行详细的介绍:

thinkphp的目录结构,自动生成目录,项目目录部署方案,命名规范,项目构建流程。

thinkphp的目录结构: 系统目录和项目目录

系统目录: common包含框架的一些公共文件,系统定义和惯例配置等。 lang目录语言文件。 lib系统的基类库目录。 tpl系统的模板目录。 mode框架模式扩展目录。 vendor第三方类库目录。

项目目录: index.php项目入口文件 common项目公共目录 lang项目语言包目录 conf项目配置目录 lib项目基目录 tpl项目模板目录 runtime项目运行时目录

<?php
define('THINK_PATH','ThinkPHP'); // 定义thinkphp框架路径
define('APP_NAME', 'test'); // 定义项目名称
define('APP_PATH', '.'); // 定义项目路径
require(THINK_PATH."/ThinkPHP.php"); // 加载框架入口文件
App::run(); // 实例化一个网站应用实例
?>
复制代码

thinkphp自动生成的目录:

common, conf, lang, lib, runtime, tpl;

项目目录:

admin:admin后台管理项目目录 home:home项目目录 common:项目公共目录,放置项目公共函数 conf:项目配置目录,放置配置文件 lang:项目语言包目录 lib:项目基目录,通常包括action和model目录 runtime:项目运行时目录,包括cache,temp,data和log tpl:项目模板目录 thinkphp: thinkPHP系统目录 admin.php: admin.php网站的后台入口文件 index.php: index.php网站的入口文件

分组模块:

app: app项目目录 common: 项目公共目录 conf: 项目配置目录 lang: 项目语言包目录 lib: 项目基目录 runtime: 项目运行时目录 tpl: 项目模板目录 public: public网站公共目录 css: css样式文件夹 images: 图片文件夹 js: js脚本文件夹

thinkphp系统目录 index.php网站入口文件

thinkphp创建项目流程:

创建数据库,数据表,项目命名创建入口文件,项目配置,创建控制类,创建模型类,创建模板文件,运行测试。

<?php
return array('APP_DEBUG' => true, // 开启调式模式'DB_TYPE' => 'mysql', // 数据库类型'DB_HOST' => 'localhost', // 数据库服务器地址'DB_NAME' => 'db_database', // 数据库名称'DB_USER' => 'root', // 数据库用户名'DB_PWD' => 'root', // 数据库命名'DB_PORT' => '3306', // 数据库端口'DB_PREFIX' => 'think_', // 数据表前缀
);
?>
复制代码
<?php
class IndexAction extends Action{public function index(){$db = new Model('user'); // 实例化模型类,参数数据表名称,不包含前缀$select = $db -> select(); // 查询数据$this -> assign('select', $select); // 模板变量赋值$this -> dispaly('index.html'); // 输出模板}
}
?>
复制代码

模板文件:

<body>
<volist name="select" id="user">
id:{$uer.id}<br/>
用户名:{$user.user}<br/>
地址:{$user.address}<hr>
</volist>
</body>
复制代码

thinkphp配置

配置文件时thinkphp框架程序得以运行的基础文件。

惯例配置,项目配置,调式配置,分组配置,模块配置,动态操作配置。

返回PHP数组的方式,所有配置文件的定义格式

<?php
return array(
);
?>
复制代码

进行二维数组进行配置

<?php
return array(
'APP_DEBUG' => true,'USER_CONFIG' =>array('USER_AUTH' => true,...),
);
?>
复制代码

调试配置

配置文件位于 think\common\debug.php
复制代码

配置文件存储位置,调式配置文件位于项目配置目录下 系统默认的调试配置文件: 开启日志记录 关闭模板缓存 记录sql日志 关闭字段缓存 开启运行时间详细显示 开启页面trace信息展示 严格检查文件大小写

thinkPHP的控制器

模块类,存储于lib\action目录下: 控制器类必须继承系统的action基础类

跨模块调用

$User = A("User"); // 实例化UserAction控制器对象
$User -> insert(); // 调用User模块的importUser操作方法
A("User")是一个快捷方法
等效于:
import("@.Action.UserAction");
$User = new UserAction();
还有比A更好的方法为:
R("User","insert"); // 远程调用UserAction控制器的insert操作方法
$User = A("User","Admin"); // 实例化Admin项目的UserAction控制器对象
$User -> insert(); // 调用Admin项目UserAction控制器的insert操作方法
R("User", "insert", "Admin"); // 远程调用admin项目的useraction控制器的insert操作方法
复制代码
<?php
header("Content-Type:text/html; charset=uft-8"); // 设置页面编码格式
class IndexAction extends Action {public function index() {$db = new Model('user'); // 实例化模型类,参数数据表名称,不包括前缀$select = $db->select(); // 查询数据$this -> assign("select", $select); // 模板变量赋值$this -> dispaly(); // 输出模板}
}
?>
复制代码
<?php
header("Content-Type:text/html; charset=utf-8"); // 设置页面编码格式
class UserAction extends Action{public function insert(){$ins = new Model("user"); // 实例化模型类,传递参数为没有前缀的数据表名称$ins -> Create(); // 创建数据对象$result = $ins -> add(); // 写入数据库$this -> redirect('Index/index', '', 5, '页面跳转中'); // 页面重定向}
}
?>
复制代码
<?php
header("Content-Type:text/html; charset=utf-8"); // 设置页面编码格式
class IndexAction extends Action{public function index() {$db = new Model('user'); // 实例化模型类,参数数据表名称,不包含前缀$select = $db -> select(); // 查询数据$this->assign('select',$select);//模板变量赋值$this->display(); // 输出模板}public function insert(){$ins = R("User", "insert", "Admin"); // 远程调用admin项目useraction控制器的insert操作方法$ins->Create(); // 创建数据对象$result = $ins->add(); // 写入数据库}
}
?>
复制代码

thinkphp的模型

模型是按照某一个形状进行操作的代名词。 模型的主要作用就是封装数据库的相关逻辑。 主要内容: 模型的命名 实例化模型 属性访问 连接数据库 创建数据 连贯操作 curd操作

实例化基础模型类

$User = new Model('User');
$User -> select();
复制代码
$User = M('User');
$User -> select();
复制代码

m方法默认是实例化model类,如果需要实例化其他模型类:

$User = M('User', 'CommonModel');
复制代码
$User = new CommonModel('User');
复制代码

实例化用户定义的模型类

// 定义的模型类放到项目lib\model目录下面
class UserModel extends Model{public function myfun() {// 。。。}
}
复制代码

实例化自定义模型类的方式:

$User = new UserModel();
$User->select(); // 进行其他的数据操作
复制代码
$User = D('User');
$User -> select(); // 进行其他的数据操作
复制代码

D方法可以自动检测模型类,不存在时系统会抛出异常,同时对于实例化过的模型,不会重复去实例化。

$User = D('User','Admin'); // 实例化admin项目下面的User模型
$User->select();
如果启动模块分组功能,还能使用:
$User=D('Admin.User');
复制代码

实例化空模型类

$Model = new Model();
// $Model = M();
$Model -> query('SELECT *FROM think_user where status=1');
复制代码
<?php
$User = new Model('User');
$User -> find(1);
echo $User -> name;
$User -> name = 'ThinkPHP';
?>
操作方法是通过返回数组的方式:
<?php
$Type=D('Type'); // 返回的type数据是一个数组
$type= $Type->find(1);
echo $type['name']; // 获取type属性的值
$type['name'] = 'ThinkPHP'; // 设置type属性的值
?>
复制代码

连接数据库: thinkphp内置抽象数据库访问层,把不同的数据库操作封装起来,只需要使用公共的Db类进行操作。

<?php
return array(
'APP_DEBUG' => false, // 关闭调用模式
'DB_TYPE' => 'mysql', // 数据库类型
'DB_HOST' => 'localhost', // 数据库服务器地址
'DB_NAME' => ‘db_database’, // 数据库名称
'DB_USER' => 'root', // 数据库用户名
'DB_PWD' => 'root', // 数据库密码
'DB_PORT' => '3306'; // 数据库端口
'DB_PREFIX' => 'think_',
);
?>
复制代码

连接数据库

使用dsn方式在初始化db类的时候传参数。

$db_dsn="mysql://root:admin@127.0.0.1:3306/db_database";//定义dsn
$db = new Db();// 执行类的实例化
$conn=$db->getInstance($db_dsn);// 连接数据库
数组传参
$dsn = array(
'dbms' => 'mysql',
'username' => 'username',
'password' => 'password',
'hostname' => 'localhost',
'hostport' => '3306',
'database' => 'dbname'
);
$db = new Db();
$conn = $db->getInstance($dsn); // 连接数据库,返回数据库驱动类
复制代码

模型类里面定义参数:

protected $connection = array('dbms' => 'mysql','username' => 'username','password' => 'password','hostname' => 'localhost','hostport' => '3306','database' => 'dbname'
);
//或者使用下面的方式:
protected $connection = "mysql://username:password@localhost:3306/DbName";
复制代码

使用pdo方式连接数据库:

return array('DB_TYPE' => 'pdo','DB_DSN'=>'mysql:host=localhost;dbname=db_database','DB_USER'=>'root','DB_PWD'=>'root','DB_PREFIX'=>'think_','APP_DEBUG' => false, // 关闭调试模式
);
复制代码

自动根据表单数据创建数据对象

class UserAction extends Action { // 定义类,继承基础类public function insert() { // 定义方法$ins = new Model('user'); // 实例化模型类$ins -> Create(); // 创建数据库$result = $ins -> add(); // 写入数据库$this-> redirect('Index/index', '', 5, '页面跳转中'); // 页面重定向}
}
复制代码

curd操作

thinkphp提供了灵活和方便的数据库操作方法,curd创建,更新,读取,和删除。

$User = M("User"); // 实例化对象
$data['name'] = 'ThinkPHP';
$data['email'] = 'ThinkPHP@gamil.com';
$User -> add($data);
$User->data($data)->add();
复制代码

读取数据的方法:

读取字段的值使用getField方法 读取数据使用find方法 读取数据集使用select方法

getField方法读取某个字段的值

$User = M('User');
$nickname = $User->where('id=3') -> getFielde(‘nickname’);
$list = $User->getField('id, nickname');
复制代码

select 方法的返回值是一个二维数组,如果没有查询到如何结果的话,返回一个空的数组

$User=M('User');
$list = $User->where('status=1') -> order('create_time') -> limit(10) -> select();
复制代码

find()方法

$User = M("User");
$User->where('status=1 and name="think" ')->find();
复制代码
<?php
header("Content-Type: text/html; charset=utf-8"); // 设置页面编码格式
class IndexAction extends Action{public function index(){$db=M('User');$select = $db->where('user="mr"')->order('id desc')->limit(3)->select();$this->assign('select',$select); // 模板变量赋值$this->display(); // 指定模板页}public function insert() {$dba = M('User');$data['user'] = 'fs';$data['pass'] = md5('gdsoft');$data['address'] = 'dashu';$result = $dba -> add($data);if($result) {$this->redirect('Index/index', '', 2, '页面跳转中');//页面重定向}}
?>
复制代码
$User = M("User");
$data['name'] = 'ThinkPHP';
$data['email']='ThinkPHP@mail.com';
$User -> where('id=5') -> save('data');
复制代码
$User = M('User');
$User -> where('id=5') -> delete();$User = M('User');
$User -> where('status=0') ->order('create_time')->limit('5')->delete();
复制代码

thinkphp框架的特点

什么是mvc?

mvc是一种经典的程序设计理念,分3部分: 模型层,视图层,控制层。

什么是模型层? 模型层是应用程序的核心部分,可以是一个实体对象或一种业务逻辑。

视图层提供应用程序与用户之间的交互界面。

控制层用于对程序中的请求进行控制。

什么是CURD?

C为创建,U为更新,R为读取,D为删除。

thinkphp使用add(),save(),select(),和delete()

什么是单一入口?

自动生成项目目录:

<?php
define('THINK_PATH','ThinkPHP'); // 定义ThinkPHP框架路径
define('APP_NAME', '1'); // 定义项目名称
define('APP_PATH', '.'); // 定义项目路径
require(THINK_PATH."/ThinkPHP.php"); // 加载框架入口文件
App::run(); // 实例化一个网站应用实例
?>
复制代码

项目流程:

<?php
define('THINK_PATH', '../ThinkPHP/'); // 定义ThinkPHP框架路径
define('APP_NAME', '2'); // 定义项目名称和路径
define('APP_PATH', '.'); // 定义项目名称和路径
require(THINK_PATH."/ThinkPHP.php"); // 加载框架入口文件
App::run(); // 实例化一个网站应用实例
?>
复制代码

config.php

<?php
return array('APP_DEBUG' => true,         // 开启调试模式'DB_TYPE'=> 'mysql',        // 数据库类型'DB_HOST'=> 'localhost',   // 数据库服务器地址'DB_NAME'=>'db_database',        // 数据库名称'DB_USER'=>'root',          // 数据库用户名'DB_PWD'=>'rot',               // 数据库密码'DB_PORT'=>'3306',          // 数据库端口'DB_PREFIX'=>'think_',      // 数据表前缀
);
?>
复制代码
<?php
class IndexAction extends Action{public function index() {$db = new Model('user'); // 实例化模型类,参数数据表名称,不包含前缀$select = $db->select(); // 查询数据$this->assign('select',$select); // 模板变量赋值$this->display(); // 输出模板}
}
?>
复制代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>ThinkPHP开发流程</title>
</head><body>
<!--循环输出查询结果数据集--> <volist name='select' id='user' >ID:{$user.id}<br/>用户名:{$user.user}<br/>地址:{$user.address}<hr></volist></body>
</html>
复制代码
<?php
define('THINK_PATH', '../ThinkPHP');        //定义ThinkPHP框架路径(相对于入口文件)
define('APP_NAME', '3');                //定义项目名称
define('APP_PATH', '.');                //定义项目路径
require(THINK_PATH."/ThinkPHP.php");  //加载框架入口文件
App::run();                             //实例化一个网站应用实例
?>
复制代码

smarty模板技术

什么是smarty,特点,模板的安装和配置的方法,设计方法等

<?phpinclude_once("../config.php");$arr = array('computerbook','name' => 'PHP','unit_price' => array('price' => '¥65.00','unit' => '本'));$smarty->assign('title','使用Smarty读取数组');$smarty->assign('arr',$arr);$smarty->display('02/index.html');
?>
复制代码
<?phpinclude '../config.php';$smarty->assign('title','Smarty保留变量');$smarty->display('03/index.html');
?>
复制代码
<?phpinclude_once '../config.php';$smarty->display('04/index.html');
?>
复制代码
<?phpinclude_once "../config.php";$smarty->assign("title","if条件判断语句");$smarty->display("06/index.html");
?>
复制代码

结言

好了,欢迎在留言区留言,与大家分享你的经验和心得。

感谢你学习今天的内容,如果你觉得这篇文章对你有帮助的话,也欢迎把它分享给更多的朋友,感谢。

感谢!承蒙关照!您真诚的赞赏是我前进的最大动力!

PHP全栈学习笔记20相关推荐

  1. 字节码学院全栈学习笔记

    今天正式加入字节码学院,努力学习Java全栈,争取在6个月内称为一个了解软件行业的人,本人在这里立铁为证: 搭建vue 组件化开发环境时,需要安装node.js =================== ...

  2. 【Java全栈学习笔记:第一阶段:JavaSE】:Java入门及环境搭建

    Java全栈课程网站: KuangStudy JavaSE课程地址: 狂神说Java 参考书籍:Java大学实用教程(第四版) 目录 Java入门及环境搭建 Java帝国的诞生 Java发展 Java ...

  3. python全栈学习笔记(一)网络基础之网络协议篇

    阅读目录 一.操作系统基础 二.网络通信原理 2.1 互联网的本质就是一系列的网络协议 2.2 osi七层协议 2.3 tcp/ip五层模型讲解 2.3.1 物理层 2.3.2 数据链路层 2.3.3 ...

  4. PHP全栈学习笔记27

    数组概述,类型,声明,遍历,输出,获取数组中最后一个元素,删除重复数组,获取数组中指定元素的键值,排序,将数组中的元素合成字符串. 数组概述,数组是存储,管理和操作一组变量. 数组类型为一维数组,二维 ...

  5. PHP全栈学习笔记3

    trim()函数,用于去除字符串首尾空格和特殊字符 返回的是去掉的空格和特殊字符后的字符串 string trim(string str [,string charlist]); str 要操作的字符 ...

  6. PHP全栈学习笔记7

    图形图像处理技术,gd库的强大支持,PHP的图像可以是PHP的强项,PHP图形化类库,jpgraph是一款非常好用的强大的图形处理工具. 在PHP中加载GD库 gd官方网址下载: http://www ...

  7. PHP全栈学习笔记29

    前言 这一章主要讲一讲PHP的背景,优势,PHP的环境搭建,书写和调式简单的PHP代码,如何解决简单的PHP错误等. 目录结构 PHP简介 PHP是面向对象,指令式编程,设计者是 拉斯姆斯·勒多夫 出 ...

  8. PHP全栈学习笔记8

    面向对象的基本概念,面向对象编程,oop,面向对象,面向对象的分析,面向对象的设计,面向对象的编程,什么是类. 类,属性和方法,类,对象,面向对象编程的三大特点.特点,封装性,继承性,多态性. 封装性 ...

  9. python3全栈学习笔记-03

    对文件的操作分为3步: 1. 打开文件,获得文件句柄 2. 通过文件句柄操作文件 3. 关闭文件 假设有如下文件: 1 上联 :**春水初生,春林初盛,春风十里,不如你.** 2 下联 :**秋池渐涨 ...

最新文章

  1. 模板方法模式 Template method 行为型 设计模式(二十六)
  2. 剖析ifstream打开含中文路径名文件失败的原因(转)
  3. android获取自适应高度,Android中oncreate中获得控件高度或宽度的实现方法
  4. shell 25个常用命令
  5. 分布式事务模型--最大努力通知型分布式事务
  6. Java项目经验是程序员成长的重要经验
  7. gradle 替换java类_Gradle字符串替换
  8. 高中数学40分怎么办_高中数学新教材都有哪些变化?
  9. 树莓派docker 搭建owncloud个人云盘
  10. linux fastboot 工具,fastboot工具(FastbootCommander)
  11. MFC控件内字体大小随控件改变
  12. Phison(群联) PS2251-70等系列量产工具,U盘量产修复,另外一芯片的量产工具
  13. 2k2实用球员_盘点推荐萌新NBA2KOL2里性价比极高又好用的球员中锋篇
  14. padding不会撑开盒子的情况
  15. 多客户端访问mysql_解决关于多客户端操作数据库并发问题
  16. android drawText()方法中x,y坐标值真正的 意义
  17. GBase8s数据库GRANT 语句
  18. 【原创】深度学习第7弹:小D识数字(MNIST手写数字集)
  19. ENVI气溶胶反演相关示例教材
  20. Android 最新版 Paypal 智能付款按钮 Paypal JavaScript SDK 集成:Smart Payment Buttons

热门文章

  1. 2017 人工智能+内容生产研究报告【附下载】
  2. 五步就让你成为一名很出色的程序员!
  3. 开源吞噬世界,得开发者得天下
  4. 抓紧!抓紧!CSDN年终重榜福利来了~人手一份,快来投稿!!
  5. 一个 P4 的 Bug,就难倒了 JDK 吗 ?
  6. 可怕!公司部署了一个东西,悄悄盯着你
  7. 摩拜单车正式进军日本,积极拓展海外市场
  8. 各种排序算法总结篇(高速/堆/希尔/归并)
  9. Acunetix WVS安全测试软件使用教程(入门级)
  10. DIV + CSS布局的一些知识汇总