[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);
}
}
?>
~~~