[TOC]
TP入门
===
核心主题
[TOC]
--
* ThinkPHP 5版本带来了哪些新特性,哪些变化?
* TP 5为API和多应用端开发带来了哪些便利?
* 实战ThinkPHP 5的数据库操作
一、简单介绍
--
1、关于Thinkphp
ThinkPHP是一个快速、简单的基于MVC和面向对象的轻量级PHP开发框架,遵循Apache2开源协议发布,从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,尤其注重开发体验和易用性,并且拥有众多的原创功能和特性,为WEB应用和API开发提供了强有力的支持。
2、关于MVC(Model-View-Controller)(模式-视图-控制器)

3、TP 5为API和多应用端开发带来了哪些便利?
ThinkPHP5针对API开发做了很多的优化,并且不依赖原来的API模式扩展。
(1)数据输出方面
控制器输出采用Response类统一处理,而不是直接在控制器中进行输出,通过设置default_return_type或者动态设置不同类型的Response输出就可以自动进行数据转换处理,一般来说,你只需要在控制器中返回字符串或者数组即可
(2)错误调试方面
由于API开发不方便在客户端进行开发调试,但ThinkPHP5的Trace调试功能支持Socket在内的方式,可以实现远程的开发调试。
安装chrome浏览器插件后即可进行远程调试,详细参考调试部分。
4、ThinkPHP5的新特性
--
ThinkPHP5.0版本的优势在于:
(1)更灵活的路由;
(2)更强大的查询语法;
(3)增强的模型功能;
(4)API开发友好;
(5)改进的异常机制;
(6)远程调试支持;
(7)单元测试支持;
(8)命令行工具;
(9)Composer支持完善;
二、环境配置
--
[upupw官网](http://www.upupw.net/)下载upupw 1.版本
[Tinkphp官网](http://www.thinkphp.cn/)下载ThinkPHP 5.0 RC4版本
1、upupw环境的基本介绍
Apache版UPUPW面板详细介绍

1-添加虚拟主机
即除了默认的主机以外,设置其它独立的主机并可绑定N个域名,设置网站的路径等。
2-删除虚拟主机
即删除已设立的一个或多个虚拟主机(此设置只是删除主机配置及绑定的域名,对网站程序没有影响)
3-修改虚拟主机
即对已经添加的虚拟主机进行域名绑定的添加与删除等操作。
4-检测端口状态
此功能为检测本机端口使用情况而准备的,可以在启动全部服务之前先按4键进行端口探测,看看80端口和3306端口有没有被占用,如被占用可关闭端口占用程序或者修改Apache和MySQL端口后启动。
s1开启全部服务
s5关闭所有服务
.................
2、Thinkphp目录介绍
project 应用部署目录
├─application 应用目录(可设置)
│ ├─common 公共模块目录(可更改)
│ ├─index 模块目录(可更改)
│ │ ├─config.php 模块配置文件
│ │ ├─common.php 模块函数文件
│ │ ├─controller 控制器目录
│ │ ├─model 模型目录
│ │ ├─view 视图目录
│ │ └─ ... 更多类库目录
│ ├─command.php 命令行工具配置文件
│ ├─common.php 应用公共(函数)文件
│ ├─config.php 应用(公共)配置文件
│ ├─database.php 数据库配置文件
│ └─route.php 路由配置文件
├─extend 扩展类库目录(可定义)
├─public WEB 部署目录(对外访问目录)
│ ├─static 静态资源存放目录(css,js,image)
│ ├─index.php 应用入口文件
│ ├─router.php 快速测试文件
│ └─.htaccess 用于 apache 的重写
├─runtime 应用的运行时目录(可写,可设置)
├─vendor 第三方类库目录(Composer)
├─thinkphp 框架系统目录
│ ├─lang 语言包目录
│ ├─library 框架核心类库目录
│ │ ├─think Think 类库包目录
│ │ └─traits 系统 Traits 目录
│ ├─tpl 系统模板目录
│ ├─.htaccess 用于 apache 的重写
│ ├─.travis.yml CI 定义文件
│ ├─base.php 基础定义文件
│ ├─composer.json composer 定义文件
│ ├─console.php 控制台入口文件
│ ├─convention.php 惯例配置文件
│ ├─helper.php 助手函数文件(可选)
│ ├─LICENSE.txt 授权说明文件
│ ├─phpunit.xml 单元测试配置文件
│ ├─README.md README 文件
│ └─start.php 框架引导文件
├─build.php 自动生成定义文件(参考)
├─composer.json composer 定义文件
├─LICENSE.txt 授权说明文件
├─README.md README 文件
├─think 命令行入口文件
三、实际操作
--
1、入口文件
入口文件位于public/index.php
在浏览器中访问入口文件
http://localhost/(项目名称)/public/
2、控制器
--
index模块的Index控制器(文件位于application/index/controller/Index.php)
http://localhost/项目名称/public/
可以为操作方法定义参数
例子:
<?php
namespace app\index\controller;
class Index
{
public function index($name = 'tangmei')
{
return 'Hello,' . $name . '!';
}
}
带name参数访问入口文件地址(例如 http://localhost/项目名称/public/index.php/index/index?name=tangmei)的时候,在浏览器中可
以看到如下输出:Hello,tangmei!
注意:
控制器类可以包括多个操作方法,但如果你的操作方法是protected或者private类型的话,是无法直接通过URL访问到该操作的。
3、视图:
给控制器添加视图文件功能,在application/index目录下面创建一个view目录,然后添加模板文件view/index/hello.html
<html>
<head>
<title>hello {$name}</title>
</head>
<body>
hello, {$name}!
</body>
</html>
要输出视图,必须在控制器方法中进行模板渲染输出操作
~~~
<?php
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
public function hello($name = 'thinkphp')
{
$this->assign('name', $name);
return $this->fetch();
}
}
~~~
http://127.0.0.1/项目名称/public/index.php/index/index/hello
4、简单数据库操作
读取数据
-- 数据库: `tang`
--
-- --------------------------------------------------------
--
-- 表的结构 `tang`
--
~~~
CREATE TABLE IF NOT EXISTS `tang` (
`id` int(6) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(45) NOT NULL,
`content` varchar(44) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
~~~
转存表中的数据 `tang`
~~~
INSERT INTO `tang` (`id`, `title`, `content`) VALUES
(1, 'tang', 'ffafwaf');
~~~
数据库配置文件application/database.php中添加数据库的连接信息。
return [
// 数据库类型
'type' => 'mysql',
// 服务器地址
'hostname' => '127.0.0.1',
// 数据库名
'database' => 'tang',
// 用户名
'username' => 'root',
// 密码
'password' => 'root',
// 端口
'hostport' => '',
// 连接dsn
'dsn' => '',
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => 'utf8',
// 数据库表前缀
'prefix' => '',
// 数据库调试模式
'debug' => true,
// 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
'deploy' => 0,
// 数据库读写是否分离 主从式有效
'rw_separate' => false,
// 读写分离后 主服务器数量
'master_num' => 1,
// 指定从服务器序号
'slave_no' => '',
// 是否严格检查字段是否存在
'fields_strict' => true,
// 数据集返回类型 array 数组 collection Collection对象
'resultset_type' => 'array',
// 是否自动写入时间戳字段
'auto_timestamp' => false,
// 是否需要进行SQL性能分析
'sql_explain' => false,
];
添加读取数据的代码
~~~
<?php
namespace app\index\controller;
use think\Controller;
use think\Db;
class Index extends Controller
{
public function hello()
{
$data = Db::name('tang')->find();
$this->assign('result', $data);
return $this->fetch();
}
}
~~~
修改模板文件,添加数据输出标签
~~~
<html>
<head>
<title>hello</title>
</head>
<body>
{$result.id}--{$result.title}
</body>
</html>
~~~
数据库
1、连接数据库(修改dababase.php文件)
~~~
return [
// 数据库类型
'type' => 'mysql',
// 服务器地址
'hostname' => '127.0.0.1',
// 数据库名
'database' => 'tang',
// 用户名
'username' => 'root',
// 密码
'password' => 'root',
// 端口
'hostport' => '',
// 连接dsn
'dsn' => '',
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => 'utf8',
// 数据库表前缀
'prefix' => '',
// 数据库调试模式
'debug' => true,
// 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
'deploy' => 0,
// 数据库读写是否分离 主从式有效
'rw_separate' => false,
// 读写分离后 主服务器数量
'master_num' => 1,
// 指定从服务器序号
'slave_no' => '',
// 是否严格检查字段是否存在
'fields_strict' => true,
// 数据集返回类型 array 数组 collection Collection对象
'resultset_type' => 'array',
// 是否自动写入时间戳字段
'auto_timestamp' => false,
// 是否需要进行SQL性能分析
'sql_explain' => false,
];
~~~
1、插入记录
~~~
<?php
namespace app\index\controller;
use think\Db;
class Index
{
public function index()
{
$re_add = Db::execute('insert into tang (id, title ,content) values (3, "thinkphp","ggjjbj")');
if($re_add)
{
echo "插入成功";
}
else
{
echo "插入失败";
}
}
}
~~~
访问路径:http://127.0.0.1/项目名称/public/index.php/index/index
2、查询数据
~~~
<?php
namespace app\index\controller;
use think\Db;
class Index
{
public function index()
{
$result = Db::query('select * from tang');
dump($result);
}
}
?>
~~~
3、更改数据
~~~
<?php
namespace app\index\controller;
use think\Db;
class Index
{
public function index()
{
$re_update=Db::execute('update tang set title="geyue" where id=3');
dump($re_update);
}
}
?>
~~~
4、删除数据
~~~
<?php
namespace app\index\controller;
use think\Db;
class Index
{
public function index()
{
$re_delete=Db::execute('delete from tang where id = 2 ');
dump($re_delete);
}
}
?>
~~~