tp5


 

 

ThinkPHP-5教程

簡介

 

 

 

相關鏈接:

https://www.kancloud.cn/manual/thinkphp5/118003

 

環境准備

必備環境

 

 

  1. 上面的環境擴展信息必須在php.ini進行開啟,同時還需要將php.exe加入到環境變量中(TP5里面也提供了類似laravel里面的artisan命令行功能,所以也要把php.exe加入到環境變量)

 

 

 

  1. 建議使用PHPstudy集成開發環境

 

 

 

  1. 常見php.ini的擴展的開啟同時還要開啟Apache里面的某些擴展

 

 

 

  1. Apacherewrite模塊的開啟(到時候TP里面要做為入庫文件的隱藏)

 

 

 

composer安裝

官網:http://www.phpcomposer.com/

相關文檔:https://www.kancloud.cn/thinkphp/composer/35668

資源包:https://packagist.org/

無網安裝composer軟件

 

 

由於上面的exe安裝過程中需要聯網進行操作,並且服務器在國外,一般安裝不成功,上面的方式不可取。換為下面的方式進行操作。

 

 

  1. 下載對應的composer.phar文件

下載地址:https://getcomposer.org/download/

 

 

 

  1. 下載一個window的命令行加強工具(cmder),該工具比本身的DOS要強很多倍,並且可以自己配置window的下命令。

網站:http://cmder.net/

網站:http://www.cnblogs.com/jadeboy/p/5132423.html

 

 

 

  1. cmder.zip加壓到一個非中文非空格的目錄

 

 

 

  1. 查找php.exe的絕對路徑

 

 

路徑:C:\phpStudy\php\php-7.0.12-nts\php.exe

 

  1. 設置alias別名,可以使用composer命令

 

 

設置如下內容

alias composer=C:\phpStudy\php\php-7.0.12-nts\php.exe  C:\dev\cmder\composer.phar $*

 

 

 

  1. 重新打開一個cmder的命令行輸入 composer -v

 

 

 

安裝

composer安裝TP5

TP5手冊:https://www.kancloud.cn/manual/thinkphp5

本地服務器啟動方式:php -S localhost:8000 -t

 

  1. 使用composer安裝

 

 

> composer create-project topthink/think local.tp5.com  --prefer-dist

安裝PHPstudywww目錄下

 

 

安裝后

 

 

 

 

  1. 使用composer安裝后,我們可以使用PHP內置的web服務器來啟動項目

> php -S localhost:8000 -t public

 

 

訪問:

 

 

注意: PHP內置的web服務器一般也就測試使用,上線肯定不用。

-S 代表是監聽的IP的地址和端口

-t  代表是網站的根目錄

 

源碼包安裝TP5

  1. 加壓tp5的源碼包到虛擬主機目錄

 

 


2. 配置虛擬主機

 

 

 

  1. 修改hosts文件

 

 

 

  1. 修改vhost文件,同時修改AllowOverride All配置,稍后偽靜態隱藏入口文件需要開啟該配置項

 

 

 

5. 域名訪問效果

 

 

 

 

 

 

基礎

需要注意: 在新版的TP5里面的,目錄的規划和文件的命名有很大的差別(和之前相比)

開發規范

 

 

 

主要的變化如下:

  1. 除了類文件的名稱需要大寫之外,其他的所有的文件和文件夾都使用小寫命名。

 

 

還要類文件,也不需要在使用類后綴(以前寫一個控制器 UserController.class.php 現在直接這樣寫User.php即可)

 

  1. 函數都建議使用下划線的命名方式(get_user_info_by_id)類都是大駝峰的方式,類里面的方法都使用小駝峰

 

  1. 還有配置項都是用小寫(以前使用的是大寫)

 

 

目錄規范

在新版的TP5里面的目錄變化也是很大的,需要注意。

 

相關文檔:https://www.kancloud.cn/manual/thinkphp5/118008

 

整體分析

 

 

 

application目錄分析

 

 

index模塊

 

 

public目錄

 

 

Tp官方的源碼目錄

 

 

 

 

 

 

Vendor目錄

 

 

 

 

入口文件

注意:在Tp5里面的入庫文件和Tp3.2是不一樣的,需要注意,是在public目錄下

 

 

 

控制器

系統默認控制器

1. tp默認控制器文件位置

 

 

注意:上面是TP默認的控制器的文件的目錄,並該控制器文件首字母大寫,同時沒有類后綴。(以前:UserController.class.php)

 

2. 如何在瀏覽器訪問該控制器下的方法?

答:域名/index.php/index模塊/index控制器/lst方法,這里TP5使用的phpinfo的模式進行URL的調度。

 

 

 

3. 效果

 

 

 

 

自定義控制器編寫

1. index模塊的controller控制器文件夾下編寫一個自己的Goods.php控制器文件

 

 

 

2. URL訪問

 

 

注意:如果我們的控制器文件使用的大駝峰方式命名,需要使用下划線方式訪問

1. 定義一個以大駝峰方式命名的類文件

 

 

 

2. URL訪問的時候,直接輸入大駝峰方式訪問,則報錯

 

 

 

3. 解決:使用下划線方式訪問

 

 

調試模式開啟

1. 修改application/config.php配置文件,將如下的信息更改為true

 

 

 

  1. 開啟調試模式后,報錯更友好

 

 

 

視圖

注意:在Tp5里面可以使用兩種方式來載入視圖

方式一:

語法:return view('視圖名稱', '關聯數組,傳遞給視圖的數據')

控制器代碼:

 

 

視圖代碼:

 

 

 

方式二:

語法:return $this->fetch('視圖名稱', [關聯數組,傳遞給視圖數據]),但需要繼承 \think\Controller控制器

控制器代碼:

 

 

視圖代碼:

 

 

 

 

URL和路由

URL訪問

 

 

 

注意1:在TP5里面,當使用URL進行訪問的時候,地址欄目的控制器的名稱無論是大小還是小寫,都會被統一的轉換為小寫。

 

 

注意2:如果控制器文件的使用UserInfo形如這樣的命名,需要使用下划線訪問。如果不希望轉換,同時,我們自己寫的控制器的訪問也不希望轉換為小寫,可以配置 url_convert = false 即可。

 

 

以后訪問大駝峰的方式,則不會報錯。

 

 

GET參數處理

URL訪問

 

 

代碼

 

 

 

隱藏入口文件

 

 

  1. 需要開啟ApacheRewrite模塊

 

 

  1. 開啟虛擬主機的AllowOverride All

 

 

  1. 在網站根目錄添加.htaccess文件

 

 

內容參考:

 

 

 

訪問效果:

 

 

注意:通過上面的操作,我們可以非常方便的隱藏入口文件,但是URL地址還是很長,是否可以進一步的優化,便於SEO。可以使用TP5里面的路由進行完成。

 

 

路由定義

注意1: Tp5里面,路由並不是必須的,不使用路由的情況下,照樣可以使用pathinfo的方式進行訪問。

例如:域名/[index.php入口文件]/index模塊名稱/index控制器名稱/lst方法名稱/get參數

 

注意2也可以開始Tp5的路由和pathinfo同時一起使用。修改配置文件進行開啟

 

 

 

注意3路由文件位置:application/route.php文件

 

案例一最簡單的路由

  1. application/route.php文件定義規則

 

 

 

  1. 定義處理路由請求的控制器和方法

 

 

 

3. 效果

 

 

對於上面的操作,我們發現goods后面的數字一般代表是某件商品的主鍵ID,一般這個不是寫死。如果寫死了,訪問其他的商品信息,則立馬報錯(例如范圍的是15

 

 

 

案例二-路由參數

1. 定義路由參數是可以變的

 

 

 

  1. 在控制器的方法里面獲取參數

 

 

案例三-路由類

除了上面的方式可以定義路由外,還有其他的方式定義路由,使用系統自帶的Route路由類

1. 路由定義

 

 

 

  1. 控制器方法定義

 

 

效果

 

 

案例四-閉包處理

對於上面的這種路由類的定義,我們還可以使用閉包函數進行響應。

1. 定義路由規則

 

 

 

  1. 創建視圖文件(public/view下)

 

 

效果

 

 

 

 

 

 

URL分隔符

TP5里面的URL的分隔符默認使用的/ ,可以通過配置 pathinfo_depr 參數改變。

 

 

 

 

  1. 修改配置文件的 pathinfo_depr

 

 

訪問

 

 

 

 

路由參數

單獨在建立一個Blog的控制器文件,然后處理某年某月的日志博客,可以使用TP里面自帶的命令行工具建立控制器。

url: http://local.tp.com/blog-2015-12 ===> 某個控制器下的方法

 

 

月份正則:http://blog.csdn.net/ljsososo/article/details/16898541

 

 

路由分組

方式一:

 

 

 

方式二:

 

 

 

其他的路由

resource資源路由:其他的如get或者是post

 

 

 

手冊提供

 

 

 

請求和響應

請求

TP5里面接收用戶的請求數據可以使用如下的方式進行處理:

  1. Request的實例

a) $request = Request::instance()

  1. 在控制器里面繼承基類控制器

a) $this->request()->param('參數')

  1. 使用 input() 函數(注意: 在TP5里面已經不能在使用Tp3.2里面的I函數)
  2. 參數的依賴注入

 

 

 

 

注意:在TP5里面IS_GET、IS_POST等常量已經不存在

如果要獲取,則需要使用Request實例進行方法獲取

 

 

響應

視圖載入

 

 

 

提示信息-成功和錯誤

  1. 定義路由

 

 

  1. 展示添加表單

 

 

3. User控制器的add方法里面完成處理

 

 

注意:TP5里面已經不再使用U函數了。

 

url函數

TP5里面url地址的生成需要使用url函數,在Tp3.2里面的U函數已經不能在Tp5里面進行使用了。

方式一:

 

 

效果:

 

 

 

方式二:

 

 

效果:

 

 

 

方式三:參數的另外一種方式

 

 

效果:

 

 

 

方式四:使用系統內部的Url類進行生產URL地址

 

 

效果:

 

 

 

 

 

重定向

 

 

直接跳轉,不給提示信息

 

 

返回數據類型

注意:默認情況下,TP5里面返回的是html文本信息,如果我們期望返回的是json格式的數據,則需要修改配置文件

 

 

控制器下的方法:

 

 

瀏覽器效果

 

 

 

json中文轉義

 

 

效果

 

 

文檔:http://blog.csdn.net/default7/article/details/38123201

 

TP5自帶json函數

 

 

效果:

 

 

json函數源碼

 

 

 

 

 

數據庫操作-DB

學習手冊

 

 

 

數據庫配置

 

 

 

注意1TP里面,可以在模塊下面單獨的建立一個database.php配置文件,代表這個模塊就使用配置的這個數據庫

 

 

 

注意2我們可以在config.php里面配置多個數據信息也是可以的

 

 

 

數據庫操作-查詢

先在控制器引入Db

 

 

使用Db類的query方法即可

 

 

查詢也可以使用占位符

 

 

 

數據庫操作-增刪改

使用Db類的execute方法

 

 

 

數據庫切換

  1. application/config.php里面配置一個db1的數據庫信息

 

 

  1. 使用Db::connect('db1') 獲取 dedecms數據庫里面的數據

 

 

 

 

 

手冊:

 

 

 

 

構造器-查詢

 

方式一:獲取所有的數據

 

 

效果

 

 

 

方式二:獲取單條數據(a. 根據主鍵 b.查詢條件)

 

 

效果

 

 

例如:查詢用戶名為caoyang的記錄

 

 

 

構造器-添加

 

 

 

構造器-更新

 

 

構造器-刪除

 

 

 

別名處理

對於上面的查詢構造器,使用的是Db::table(表前綴的表名),可以換一種方式來不寫表前綴

Db::name('不要表前綴的表名')

 

 

建議使用Db::name()方法調用

 

助手函數

在新版TP5里面已經不存在M()函數(tp3.2的時候可以幫我們實例化系統的模型)使用的是db()幫助函數進行替換

db('不要前綴的表名')->select();

 

 

 

閉包查詢

db('admin')->select(function($query){

// $query里面可以設置查詢的條件

});

 

 

 

使用Query對象查詢

有點類似laravel里面的查詢構造器

 

 

 

 

模型學習

MVC里面,M是負責對數據的處理,其實在TP5里面模型封裝的已經很好了,基本上我們不用做過多的操作,使用系統自帶的基類即可完成大部分的curd操作。

 

 

模型定義

需要寫在模塊的model目錄下,我們可以使用TP5自帶的命令行工具進行生成。

注意1:在TP5里面模型也不在使用類后綴,直接就是使用去除表前綴后的名稱作為模型的名稱。(模型名稱使用大駝峰的方式)

例如:表的名稱為 sh_admin 對應的模型文件名稱 Admin.php

例如:表的名稱為 sh_goods_attribute 對應的模型文件名稱 GoodsAttribute.php

 

>php think make:model app\index\model\User

 

 

創建后

 

 

 

 

定義sh_user表

上面的模型和下面的sh_user是對應的

 

 

基本操作-增加

完成數據的增加主要有如下幾種方法

  1. 模型對象的save方法(先為對象設置屬性)
  2. 模型類的create靜態方法
  3. 模型對象的saveAll批量添加方法

 

 

實操:

1.模型對象的save方法(先為對象設置屬性)

 

 

2.模型類的create靜態方法【簡化操作】

 

 

3.模型對象的saveAll批量添加方法【上面的兩種操作,都只能完成單條數據的插入,如果批量插入數據,需要使用模型對象的saveAll方法】

 

 

 

基本操作-查看

查詢數據主要有如下幾種方法

  1. 模型類的get靜態方法【存在返回值為對象,否則為null
  2. 通過字段查詢getByFieldname()方法
  3. 根據條件查詢get(['username' => 'root'])
  4. where方法查詢->find()
  5. where方法查詢->select()
  6. 模型類的all靜態方法和select靜態方法

 

實操:

1.模型類的get靜態方法【存在返回值為對象,否則為null】,通過傳遞主鍵獲取數據

 

 

效果

 

 

2.根據條件查詢get(['username' => 'root'])

方式一:

 

 

方式二:使用where方法傳遞(需要注意后面要通過find()方法調用一下)

 

 

 

3.通過模型對象的字段查詢getByFieldname('查詢條件')方法

 

 

 

  1. 模型類的where方法查詢,然后調用find()方法

 

 

 

5.where方法查詢->select()

方式一:

 

 

方式二:

 

 

 

6.模型類的all靜態方法和select靜態方法

 

 

注意:對應allselect方法返回的數據,是一個數組,數組中的每個元素是一個模型對象,如果我們需要把他們轉換為普通的二維數組(數組中的元素也是數組)

 

 

效果:

 

 

 

便捷方式獲取模型實例

在新版的Tp5里面可以有如下兩種便捷方式獲取模型實例:

方式一:使用model助手函數

 

 

 

方式二:使用TP5自帶的Loader類的model靜態方法

 

 

 

總結:在新版的TP5里面,在原先TP3.2里面的單字母函數D已經不存在,取而代之的是model函數。

 

基本操作-更新

更新數據主要有如下幾種方法

1. get(),后save()

2.模型類update靜態方法

 

 

實操:

1.先調用模型類的get()靜態方法,然后在調用模型對象的save()方法

 

 

2.模型類update靜態方法

方式一:

 

 

方式二:

 

 

 

基本操作-刪除

刪除數據主要有如下幾種方法

1.先使用模型類的get()靜態方法,然后在使用模型對象的delete()方法

2.模型類destroy靜態方法

 

 

實操:

1. 先使用模型類的get()靜態方法,然后在使用模型對象的delete()方法

 

 

2.模型類destroy靜態方法

 

 

3.使用destroy同時刪除多條數據

 

 

4.模型對象的delete方法進行刪除(需要傳遞刪除條件)

 

 

 

相關文檔

網站:https://www.kancloud.cn/manual/thinkphp5/135186

 

模型關聯

注意:在TP里面的模型關聯沒有laravel里面那么好用,簡單的了解即可,一般來說,還是建議自己在代碼里面完成模型間的關系處理。不要過來的依賴模型關聯。

 

TP里面主要是定義三種模型關聯類型:

 

一對一

簡介

注意:一對一的關系是可以在一張表里面完成的,但是一般來說,數據有冷熱之分,熱數據(查詢頻繁的數據,應該單獨的抽取稱為一張表,水平方向字段數應該盡可能的少)冷數據(查詢較少的數據,單獨的放在另外的一張表里面進行操作,通過一個外鍵和熱數據表進行關聯。例如下面的表里面的是通過sh_profile表里面的user_id產生的關聯。)

 

場景:例如一個用戶存在一個具體的用戶履歷信息

sh_user 用戶表

id

username

passsword

email

1

caoyang

admin88

gogery@163.com

3

andy

admin88

andy@sina.com

 

sh_profile 履歷表

id

user_id

address

card_id

education

......

23

1

深圳市

421023112

本科

........

34

3

廣州市

7754123123

碩士

 

 

自己手工的連表查詢:

> select a.*, b.address  from sh_user a left join sh_profile b on a.id = b.user_id where a.id = 3;

 

關聯查詢

  1. 建立用戶表和履歷表

 

 

 

  1. 創建User.phpProfile.php模型文件,並在User.php模型文件里面定義模型關聯信息

 

 

履歷表模型

 

 

 

  1. 查詢關聯信息

 

 

效果:

 

 

對於上面的操作,完全可以自己寫sql完成

 

 

 

百度:鏈式操作

http://www.thinkphp.cn/topic/43233.html

 

 

 

關聯添加

1. 完全可以自己去在代碼里面完成,沒必要依賴TP的關聯模型

 

 

 

  1. 使用Tp的關聯模型進行數據的添加

 

 

 

一對多

簡介

一對多的模型還是很常見的,一般解決方法就是增加一張附加表,然后在附加表里面增加一個關聯字段。

常見:一個用戶可以存在多本書籍。

sh_user表:

id

username

passsword

email

1

caoyang

admin88

gogery@163.com

3

andy

admin88

andy@sina.com

 

sh_book

id

user_id

img

author

title

....

1

3

1.jpg

莫言

分錄肥臀

 

3

3

3.jpg

西紅柿

斗戰

 

 

關聯查詢

  1. 創建book模型,並且在user模型里面定義關聯關系

 

 

定義關系

 

 

 

  1. 構造測試數據

 

 

 

  1. 查詢數據

 

 

關聯添加

1. 不依賴TP的關聯模型,自己手工的解決

 

 

 

  1. 使用Tp的關聯模型完成

 

 

 

多對多

文檔:https://www.kancloud.cn/manual/thinkphp5/142359

自動驗證

相關文檔:https://www.kancloud.cn/manual/thinkphp5/129319

 

場景:用戶的添加的時候完成自動驗證,在TP5里面可以使用多種方式完成驗證操作。

 

驗證類文件-方式一

  1. 在模塊下建立一個validate目錄,編寫對應的驗證類(類文件的名稱和模型名稱一致)

 

 

  1. 在控制器中使用模型對象的validate方法調用

 

 

效果

 

 

驗證類文件-方式二

 

 

 

控制器驗證-方式一

  1. 調用控制器的$this->validate(驗證數據,驗證類名稱)方法

 

 

 

 

控制器驗證-方式二

1.調用控制器的$this->validate(驗證數據,驗證的規則)方法

 

 

注意:驗證通過返回true,否則返回錯誤的提示信息

注意:如果用戶想自定義驗證提示信息,則可以傳遞第三個參數

 

 

系統驗證類的使用

在有的時候我們不希望自己定義驗證類來處理,可以使用系統自帶的Validate類進行驗證

 

 

驗證類的靜態方法

 

 

演示

 

 

 

驗證場景

TP里面使用了一種叫做驗證場景的概念,針對不同的場合使用不同的驗證,例如:在添加的時候有添加的驗證規則;在更新的時候有更新的規則

 

 

 

表單驗證

主要是為了防止外站提交(csrf攻擊)

解決:

1. 在服務器返回表單信息的之前,生成一個唯一的密鑰,然后在表單里面的隱藏域里面存放一下,同時還要把數據存到session里面一下。

2. 用戶填完信息后,點擊提交后,檢測用戶表單隱藏域里面的密鑰和session里面的時候一樣,一樣則沒有偽造提交(外站提交)

 

實現:

1. 在提交表單里面使用token()函數生成一個隱藏域

 

 

 

  1. 在自動驗證里面進行驗證

 

 

-dateFormat驗證規則

TP5如果需要驗證某個時間數據,可以指定驗證個還是,我們可以使用dateFormat規則,同時為其傳遞一個驗證的規則字符串。

 

 

查看Validate底層的dateFormat方法

 

 

相關文檔:

http://code.ziqiangxuetang.com/php/func-date-parse-from-format.html

 

SQL調試

本地調試模式開啟

 

 

修改config.php配置文件即可

 

 

打印最后執行的sql

 

 

 

雜項-驗證碼

在完成驗證之前,先做一個簡答的后台的登錄頁面 主要是學習驗證碼和自動生成

 

驗證碼

  1. 使用composer下載TP官方提供的驗證的類庫

composer require topthink/think-captcha

 

 

下載后位置

 

 

 

  1. 開啟路由規則(因為官方提供的驗證類庫里面需要使用到路由)

 

 

 

  1. 在控制器里面進行驗證處理(提供兩種方式)

 

 

 

 

驗證碼配置

  1. 在模塊的extra目錄下增加一個captcha.php配置文件

 

 

  1. 書寫配置項

 

 

具體的配置項目

 

 

源碼分析

1. 驗證碼源碼的目錄

 

 

  1. 查看一下幫助函數

 

 

 

 

 

  1. 驗證路由和規則擴展

 

 

 

  1. 驗證碼生成

 

 

 

雜項-上傳

TP5里面實現文件上傳是很簡單的

 

  1. 定義一個表單

 

 

 

  1. 在控制器的方法里面完成上傳的處理

 

 

驗證

 

 

直接調用file對象validate方法即可

 

 

 

上傳文件的命名

默認的文件的目錄命名是的當前的日期,文件的名稱是的md5

 

 

 

  1. 修改默認的命名方式位sha1

 

 

效果

 

 

 

  1. 修改默認的命名方式位uniqid函數

 

 

效果

 

 

 

 

 

命令行工具

控制器生成

語法一:

>  php think make:controller  app/index/controller/Blog

 

 

可以在applicationindex模塊下建立一個Blog控制器

 

 

 

 

語法二:

>  php think make:controller  app/index/controller/Blog --plain

 

 

生成的控制器代碼里面沒有任何的方法

 

 

 

模型生成

語法一:

 

 

 

 

模塊生成

定義build_admin.php文件,規定生成內容

 

 

語法:

> php think build --config build_admin.php

 

 

查看內容

 

 

 

 

 

 

 

 

Session機制

 

 

Session初始化

 

 

一般來說我們不需要手工的進行設置,TP5會在第一次調用Session類的時候進行初始化操作。

 

讀取Session數據

 

 

通過Request類型的實例的session可以進行session的操作

 

 

 

 

 

 

操作session

系統提供的Session類主要有如下幾個方法來操作session

  1. set方法:設置
  2. get方法:獲取
  3. has方法:判斷是否存在某個key
  4. delete方法:刪除某個key
  5. clear方法:清空
  6. flash方法:設置一次性session
  7. flush方法:清空

 

 

助手函數

 

 

模板輸出

 

 

session驅動

 

 

 

 

Cookie機制

cookie初始化

 

 

 

cookie操作

 

 

 

助手函數

 

 

模板輸出

 

 

 

注意:3.25.0的區別

tp3tp5之間還是有些區別的,需要注意的是,從開發者的角度來說,tp底層是改了很多東西。對於使用者來說,更多的是寫法上的一些變化。

相關文檔:http://www.cnblogs.com/wupeiky/p/5850108.html

 

控制器調用載入視圖

 

 

 

單字母函數去除

 

 

常見助手函數

 

 

 

 

獲取某個字段的值

 

 

控制器不區分URL大小寫

 

 

標簽語法轉換

 

 

控制器和模型類后綴

 

 

請求對象和響應對象和常量去除

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM