默認入口文件
首先吶,可能是受Laravel的啓發,新的TP5框架改掉了之前入口文件放在框架根目錄(TP3)的習慣,將入口文件放在了public目錄下。此目錄下的所以資源都能被URL訪問所獲取,所以對於一些敏感文件請不要放在這裏
TP5支持的URL模式
TP5所支持的URL模式相對於TP3是不同的,對於傳統的m(模型)c(控制器)a(方法/操作)是不給予支持了
URL大小寫問題
默認情況下,URL是不區分大小寫的,也就是說,除了開頭用的域名和參數外,後面的控制器,方法名都是不區分大小寫的
響應輸出
對於TP5控制器,本應可以返回數組(Array)格式,但是需要設置config目錄下的app.php(我使用的是TP5.1)中的default_return_type參數。參數默認輸出類型爲html,將其設置爲josn/xml即可
如果不想更改配置可直接使用exit函數
使用框架類方法讀取配置文件注意事項(TP5.1)
在TP5.1之前的框架中,使用這樣的方式可以讀取到所以配置項以及值。但是在TP5.1中是無法使用的。正確的使用方法如下:
TP5.1的配置文件集中放置在與application同級目錄下的config目錄中
這些配置可以在任何位置被使用
如果想要在application\index使用自己配置的數據庫,可在config目錄下創建index\database.php,這樣會覆蓋原來config目錄下的database.php
當然這樣的配置只能在application\index目錄下生效
多數據庫的配置:
在database.php文件下添加數據庫配置
讀取app這個配置文件:
記得要加點,不然會返回NULL
使用助手函數:
如果只獲取一級配置項,推薦使用pull方法:
在配置文件中,app是默認的一級配置文件,是什麼意思呢?
上面兩種獲取配置文件是一致的
使用助手函數:
查詢配置文件是否存在:
使用助手函數:
動態設置配置文件:
助手函數(助手函數只有一個,可以通過輸入參數的不同實現get、has、set):
TP5.1配置文件優先級
application/module_name/config/app.php優先級第一
application/config/app.php優先級第二
application/config/module_name/app.php優先級第三
關於Config下的get方法,我試圖使用,但是百度不到
Thinkphp概念個人理解
-
參數類型約束
對一個參數進行類型約束成一個對象後,他會自動的實例化(Request $request)
-
單例模式、工廠模式、對象樹
單例模式可以理解爲手機制作圖紙 工廠模式則是可以大批量生產手機的工廠 對象註冊樹則是每個手機都要獲得入網許可,每個手機都有自己的IMEI號
-
Trait類
Trait類是爲了突破php對繼承的數目限制,實現代碼複用的一種手段
-
容器、依賴注入
原理:
-
任何一個URL訪問最終都會訪問到控制器中某一個具體的方法
-
一個控制器對應着一個類,如何進行統一管理?
-
容器用於類的管理,還可以將類的實例(對象)作爲參數,傳遞給類方法,自動觸發依賴注入
-
依賴注入:將對象類型的數據,以參數的方式傳送到方法的參數列表
-
URL訪問:通過GET方式將參數傳送到指定控制器方法中,例如 字符串、數值等
-
如果要傳一個對象到方法中呢?
-
依賴注入:解決向類中方法傳入對象
容器其實就是對象註冊樹 依賴注入這是爲了實現將對象作爲參數傳入控制器方法
-
-
綁定類到容器
綁定類到容器,其實就是實例化一個類的過程
-
閉包
如果類是家用筷子,閉包就是一次性的
-
facade(門面)
-
facade字面意思是門面,作用是靜態代理,讓動態方法能夠靜態調用
-
之前每次require其他類的時候,都需要new一個對象出來,才能調用其方法(創建對象後使用->來調用方法),現在能直接調用(使用::調用)
-
要使用門面技術就需要繼承TP框架的\think\Facede類
-
比較原始的手段是創建一個繼承Facade的類,通過getFacadeClass這個靜態方法來手動綁定一個需要靜態代理的類的命名空間
-
TP框架中提供了動態綁定的函數,即\think\Facade::bind,需要兩個參數,第一個爲用來代理的類的命名空間,第二個爲需要代理的類的命名空間
-
絕對路徑和相對路徑
\app\index 和 app\index 的含義是不一樣的,前者是絕對路徑,而後者是相對路徑
-
ThinkPHP5.1控制器較之前版本的區別
在TP5.1中控制器不需要繼承
繼承父類可以使用父類中已有的屬性和方法
Controller.php是不可以使用靜態代理的
Request中請求對象的方法:
1.new Request()
2.使用靜態代理 \think\Facede\Request
3.使用依賴注入:\think\Request $request
4.使用父類的屬性 $request $this->request
數據庫連接的方法有三種:
1.全局配置,在config目錄的database.php文件中進行配置
2.動態配置,使用\think\Db::connect([])進行配置,只能在本次使用
3.DSN配置,格式如:數據庫類型://用戶名:密碼@數據庫地址:端口/數據庫名稱#字符集類型(例如:utf8)
再傳入\think\Db::connect()中
數據庫的CURD:
1.插入
單條插入
需要先有一個數組存放數據
Db::insert(data,ture)是使用replace方式寫入,只支持mysql數據庫
Db::insertGetId(data)
2.查詢
單條查詢
需要連貫操作進行
* table():需要輸入完整的數據庫名稱
* where(): 設置查詢條件 表達式 數組
* 單一條件用表達式
* 多個條件用數組
* find():返回符合條件的第一條數據
where中的查詢條件可以寫在find()中
field()用於設置接收的字段和設置別名(別名設置在現版本中好像只支持英文別名)
多條查詢
select()
遍歷時使用foreach可以消掉數據前的下標
3.更新
update()
4.刪除
delete()
原生數據庫操作:
查詢:ELECT id
,OwnerId
FROM merchant_release_parking_space
WHERE id
IN (23,24,25)
插入:INSERT merchant_release_parking_space
SET OwnerId
=11,SpaceAddress
=‘華東交通大學停車場’
更新:UPDATE merchant_release_parking_space
SET OwnerId
=11 WHERE id
=23
刪除:DELETE FROM merchant_release_parking_space
WHERE OwnerId
=11 AND SpaceAddress
=‘華東交通大學停車場’
模型是用於與一張數據表綁定的
需要繼承think\Model類
在控制器中可以使用模型來代替數據庫連接
例如:Student::等價於Db::table(‘student’),這樣返回的數據爲對象類型
模板支持前綴,只需要寫入剩餘部分即可
模板返回的數據爲對象類型,普通查詢返回的數據非對象,不能進行對象操作
不需要模板直接輸出變量有三種方法:
1.調用父類display方法(需要繼承 \think\Controller)
2.調用父類視圖類實例變量view的display(需要繼承 \think\Controller)
3.使用靜態調用(\think\Facade\View)
4.依賴注入(\think\View $view)
模板輸出:
使用assign將變量傳入
* 傳入變量可以爲:
* 一個單獨變量
* 多個變量
* 一個數組
* 一個對象
調用assign的方式需要和調用fetch的方式相同,前端才能接收到傳過來的變量
模板佈局:
爲了簡化網站中某些固定佈局,減少重複勞動
在當前模塊中創建view文件夾,創建類似header、footer的html文件,將可能需要重複利用的html拆分到每個html中
需要使用時,通過{include file=’’ /}進行調用
TP框架默認調用爲view下
開啓全局模板佈局可以讓用戶只關注網站主體部分
需要設置:
// 開啓全局模板佈局
‘layout_on’ => false,
// 全局模板佈局名稱
‘layout_name’ => ‘layout’
// 模板佈局主題部分
‘layout_item’ => ‘{text}’
當訪問模板時,優先訪問view下的layout模板文件,其中的{CONTENT}爲用戶可編輯替換的主體部分
模板繼承:
相對於模板佈局靈活性更好些
通常情況下在view目錄下創建public目錄,放置一些公共文件,其中base.html爲公共繼承模板
主體部分改爲模塊
{block name=’’}{/block}
當需要繼承模板時
{extend name=’’ /}
使用標籤{block name=’’}{/block}對父類模塊進行重寫
如果需要顯示原父類標籤中內容 {block}
驗證器驗證分爲兩種:
1.驗證器驗證
2.獨立驗證
二者區別:獨立驗證不依賴用戶自定義的驗證器類
驗證器:新建驗證類,繼承框架validate類,重寫$rule變量
調用方式有三種:
1.調用自定義驗證器類進行驗證
2.調用系統定義驗證器類進行驗證(需要先綁定門面和自定義規則類)
3.調用Controller類中validate函數,第一個參數爲驗證信息,第二個參數爲驗證規則類(即自定義驗證器)(控制器驗證)
在用戶自定義驗證器類的時候,unique參數用於驗證輸入信息在指定表中是否唯一
confirm參數用於密碼驗證
TP框架錯誤信息的輸出不但可以在HTML中顯示,也可以切換成控制檯顯示,在config目錄下的trace.php中進行設置
在標準html頁面中,使用link標籤引用css樣式,使用script引用js文件,在TP5.1框架中可以使用{load href=""}來引用這兩種文件