關於TP5.1框架一些基礎知識小結

默認入口文件

默認入口文件內容
首先吶,可能是受Laravel的啓發,新的TP5框架改掉了之前入口文件放在框架根目錄(TP3)的習慣,將入口文件放在了public目錄下。此目錄下的所以資源都能被URL訪問所獲取,所以對於一些敏感文件請不要放在這裏

TP5支持的URL模式

TP5支持的URL模式
TP5所支持的URL模式相對於TP3是不同的,對於傳統的m(模型)c(控制器)a(方法/操作)是不給予支持了

URL大小寫問題

URL大小寫問題
默認情況下,URL是不區分大小寫的,也就是說,除了開頭用的域名和參數外,後面的控制器,方法名都是不區分大小寫的

響應輸出

響應輸出
對於TP5控制器,本應可以返回數組(Array)格式,但是需要設置config目錄下的app.php(我使用的是TP5.1)中的default_return_type參數。參數默認輸出類型爲html,將其設置爲josn/xml即可
默認輸出類型
如果不想更改配置可直接使用exit函數
exit

使用框架類方法讀取配置文件注意事項(TP5.1)

config函數錯誤使用
在TP5.1之前的框架中,使用這樣的方式可以讀取到所以配置項以及值。但是在TP5.1中是無法使用的。正確的使用方法如下:
config函數正確使用

TP5.1的配置文件集中放置在與application同級目錄下的config目錄中
配置目錄
這些配置可以在任何位置被使用
如果想要在application\index使用自己配置的數據庫,可在config目錄下創建index\database.php,這樣會覆蓋原來config目錄下的database.php
自己配置數據庫
在這裏插入圖片描述
當然這樣的配置只能在application\index目錄下生效
多數據庫的配置:
多數據庫配置
在database.php文件下添加數據庫配置
讀取數據庫配置文件
讀取app這個配置文件:
讀取配置文件
記得要加點,不然會返回NULL
使用助手函數:
獲取app配置文件
如果只獲取一級配置項,推薦使用pull方法:
pull
在配置文件中,app是默認的一級配置文件,是什麼意思呢?
app是默認的一級配置文件
上面兩種獲取配置文件是一致的
使用助手函數:
app是默認的一級配置文件
查詢配置文件是否存在:
has
使用助手函數:
助手函數
動態設置配置文件:
動態設置
助手函數(助手函數只有一個,可以通過輸入參數的不同實現get、has、set):
動態設置

TP5.1配置文件優先級

application/module_name/config/app.php優先級第一

application/config/app.php優先級第二

application/config/module_name/app.php優先級第三

關於Config下的get方法,我試圖使用,但是百度不到

Thinkphp概念個人理解

  1. 參數類型約束

    	對一個參數進行類型約束成一個對象後,他會自動的實例化(Request $request)
    
  2. 單例模式、工廠模式、對象樹

    	單例模式可以理解爲手機制作圖紙
    	工廠模式則是可以大批量生產手機的工廠
    	對象註冊樹則是每個手機都要獲得入網許可,每個手機都有自己的IMEI號
    
  3. Trait類

    	Trait類是爲了突破php對繼承的數目限制,實現代碼複用的一種手段
    
  4. 容器、依賴注入

    原理:

    • 任何一個URL訪問最終都會訪問到控制器中某一個具體的方法

    • 一個控制器對應着一個類,如何進行統一管理?

    • 容器用於類的管理,還可以將類的實例(對象)作爲參數,傳遞給類方法,自動觸發依賴注入

    • 依賴注入:將對象類型的數據,以參數的方式傳送到方法的參數列表

    • URL訪問:通過GET方式將參數傳送到指定控制器方法中,例如 字符串、數值等

    • 如果要傳一個對象到方法中呢?

    • 依賴注入:解決向類中方法傳入對象

      容器其實就是對象註冊樹
      依賴注入這是爲了實現將對象作爲參數傳入控制器方法
      
  5. 綁定類到容器

    	綁定類到容器,其實就是實例化一個類的過程
    
  6. 閉包

    	如果類是家用筷子,閉包就是一次性的
    
  7. facade(門面)

  •   facade字面意思是門面,作用是靜態代理,讓動態方法能夠靜態調用
    
  •   之前每次require其他類的時候,都需要new一個對象出來,才能調用其方法(創建對象後使用->來調用方法),現在能直接調用(使用::調用)
    
  •    要使用門面技術就需要繼承TP框架的\think\Facede類
    
  •   比較原始的手段是創建一個繼承Facade的類,通過getFacadeClass這個靜態方法來手動綁定一個需要靜態代理的類的命名空間
    
  •   TP框架中提供了動態綁定的函數,即\think\Facade::bind,需要兩個參數,第一個爲用來代理的類的命名空間,第二個爲需要代理的類的命名空間
    
  1. 絕對路徑和相對路徑

    	\app\index 和 app\index 的含義是不一樣的,前者是絕對路徑,而後者是相對路徑
    
  2. 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)Db::insert(data)是普通寫入 Db::insert(data,ture)是使用replace方式寫入,只支持mysql數據庫
Db::insertGetId(data)idDb::insertAll(data)寫入數據後,返回其id 多條插入 Db::insertAll(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=""}來引用這兩種文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章