原始碼地址:https://gitee.com/huxiaobai_001/swoft2.0.g...
原始碼私有 獲取請加微信或qq:
微訊號:15275411187
QQ號碼:495681586
專案docker部署
涉及到的知識點總結:
http服務:
1.響應資料
2.重定向
3.請求物件
4.響應自定義函式的封裝之使用
5.獲取請求路徑 埠號 等其他
6.控制器請求字首
7.請求控制器裡面的方法 記得route method 以及書寫格式test1 而不是別的比如/test1 要知道為啥
8.獲取請求物件和響應物件 有三種方法 這只是其中一種 去看手冊
9.全域性中介軟體 在bean.php當中配置 如何建立中介軟體 注意裡面必須@bean() 分請求前和請求後中介軟體 去看案例即可
10.控制器層面的中介軟體 控制器層面中介軟體和全域性中介軟體請求前請求後執行順序問題 詳見swoft2學習筆記
11.方法層面的中介軟體 詳見TestController.php類裡面的test5()案例
12.get請求的時候直接傳遞引數進來 注意路由的寫法 test2/{userename} 並且這裡是username 那麼在test2(string $username) 括號當中也必須是username
13.依賴注入的形式使用request請求物件
- $request->raw()接受傳送過來的原始資料
- $request->getBody()->getContents() 也可以接收傳送過來的原始資料
- 利用兩種方式接收傳送過來的json原始資料 並轉成陣列形式
- $request->getHeader(‘content-type’) 獲取請求頭資訊裡面的content-type
- jsonForObject() 公共函式當中做了判斷 不管是post還是get請求 只要是jsonForObject()括號當中不傳參 咋返回接受到的引數的陣列形式
- jsonForObject()函式的使用 不傳參的時候返回get 或者 post 過來的引數的陣列形式
- jsonForObject() 傳參的情況下將json引數對映到實體 通過物件化的形式訪問實體裡面的引數案例 請去參考TestController.php裡面的test9()方法 已經test13()方法的小案例
- 獲取bean配置內容 案例: TestController.php裡面的test10()方法
- 要知道 /** @var $testObj TestJsonToObjEntity */ 是幹啥的 主要就是為了有提示功能 $testObj->getXXX() 起一個程式碼提示作用
- DB::table() 表裡面寫沒有字首的表名稱 不用建模型 也不用建實體 直接用就行 更多使用參考手冊吧
- DB::selectOne()等的原生sql的操作 參考手冊吧
- 同一臺伺服器切庫以及不同伺服器之間切庫案例 請參考 TestController.php當中的test11小案例
- 模型例項的建立 如何使用命令來建立模型實體 參考有道雲筆記裡面 “10.模型的生成”
- 模型實體查詢出來的結果 如何轉變成陣列 直接使用結果集呼叫toArray()即可
- 要知道驗證器當中發生錯誤的時候會將詳細的錯誤資訊返回給客戶端 這是沒有必要的 如何處理 詳見《swoft2學習筆記》當中的“統一異常處理總結”
- 業務處理的時候 也會發生錯誤 這個時候可以使用自定義的異常錯誤處理程式 詳見《swoft2學習筆記》當中的“統一異常處理總結” App\Exception\Handler\ApiExceptionHandler當中返回的地方還可以加上code file等欄位資訊
- 控制器層面註解式驗證器的使用 預設get請求的話 是不支援驗證器的使用的 所以需要如何處理在product.php當中的yzqValidator()方法當中有明確的解釋
- 非註解驗證器的使用 不區分get還是post
- 自定義驗證器規則的使用 詳情參考《swoft2.0學習筆記》當中的“自定義驗證器規則驗證”
- jsonForObject() 不傳遞模型實體 就是獲取get post 引數的陣列形式 傳遞則是 將引數對映到模型實體當中去 但僅僅針對的是這種型別:{“orderId”:123,”orderNo”:”MPV001”,”userId”:”001”,”orderStatus”:2,”orderMoney”:20000}
- mapToModelsArrary() 也是將引數對映到模型實體 但是不同的是 第一個引數必須是陣列形式 所以前端請求的資料型別 也必須是陣列形式的才行或者在後端形成一個陣列傳遞進去也行:{“prodItems”:[{“orderId”:”2342342”,”orderNo”:”MPV00”,”userId”:”001”,”orderStatus”:”1”,”orderMoney”:”12.2”}]}
- mapToModelsArrary() 的使用詳情參考 TestController當中的 test18()方法
- jsonForObject()和mapToModelsArrary()都可以將引數轉換成實體模型的物件 直接呼叫save()進行資料的儲存或者修改操作 只不過是傳遞進去的引數不同而已
- 如果資料庫當中的欄位是 admin_id 那麼資料模型當中的屬性就應該是 adminId 前端傳遞引數的時候需要和模型實體裡面保持一致 為 adminId才行
- 資料庫的事務操作 沒有封裝時候的事務操作 以及 封裝好的sws()事務函式的使用
- sgo()協程的使用 這個手冊當中沒能找到 不要理解成協程任務 是協程 利用協程來處理東西
- redis的連結 bean.php當中配置redis的連結
- redis切庫 從0庫 切換到1庫 去訪問1庫裡面的元素的值 詳見TestController.php當中的test23()方法案例
- 異常的處理 TestController當中的test14()方法當中有案例 swoft2學習總結當中有總結文件
- 非同步任務 比如非同步redis 非同步mysql的使用 非同步IO的處理 TestController當中的test23()方法當中就用到了非同步redis任務 投遞任務
- 使用者自定義程式的使用 TestController當中的test23()當中通過非同步redis插入元素到redis 然後通過使用者自定義程式對訂單狀態進行了處理
- redis的訂閱與分佈 以及 redis的有序集合的使用
- 如何列印原生sql語句
- 物件結果集轉化為陣列 toAarray()
- 投遞協程任務以及投遞多協程任務
- 自定義命令的使用
websocket服務:
用到的映象:
1.前端連結ws服務
2.連結上伺服器之後的回撥 在回撥當中可以去做一些初始化的操作
2.1前端js當中請求訊息控制器裡面的某個方法 傳送訊息內容
3.前端js當中接收服務端傳送的內容時候的回撥
4.訊息控制器的使用 設定ws的訪問路徑
5.服務端連結上websocket的時候要執行該方法 不要少了註解
6.給訊息控制器起一個別名 連結上伺服器之後的前端回撥裡面可以請求訊息控制器裡面具體的某個方法 ws.send(“user.age:this is age”)
7.訊息控制器當中通過Message類裡面的方法獲取訊息內容 注意:Message類當中是獲取不到fd訪客唯一標識的 得用Request類
8.Session::mystGet()->push() 的形式傳送訊息到前端使用者
9.通過Request()物件獲取連線使用者的唯一標識
10.通過serever()->sendTo() 向客戶端傳送json形式的內容
11.JSON 協議通訊資料結構 去看手冊 https://www.swoft.org/docs/2.x/zh-CN/webso...
12.const req = {cmd:’cast.top’,data:{},ext:{}}
ws.send(JSON.stringify(req));//請求cast.top獲取直播間列表資料
前端傳送json字串格式的引數到後端ws服務
13.server()->sendTo() 推送給指定使用者訊息
14.推送給全部連線使用者某些訊息server()->sendToAll()
15.推送給部分使用者某些訊息server()->sendToSome();
16./*
* 文字直播系統思路整理:
* 通過上邊進入直播間和退出直播間我們已經明白
* 使用者進入直播間的時候帶著 使用者名稱稱 和 房間號id
* 然後我們通過redis裡面的hash型別 用cast.房間號做key值 將username=>使用者連線ws的唯一標識 放到cast.房間號 裡面去
* 然後我們再獲取當前房間裡面所有的人的連結ws的唯一標識
* 將XXX進入該房間的資訊推送給在該房間的所有的人
* 那麼 文字直播也是一樣的 只不過從前端傳遞過來的時候多了個引數:發表的內容
* 然後也是和上邊一樣 這裡就是將釋出的內容推送到該房間裡面的所有的人即可實現文字直播間的功能
* */
本作品採用《CC 協議》,轉載必須註明作者和本文連結