DeerOJ的前端框架介紹-model資料夾

山城甘草發表於2024-05-30

model資料夾

model資料夾下儲存的是一些相關類的php檔案,在HTML檔案生成的時候,利用這些類能夠高效地輔助檔案與檔案之間的排程轉換。資料夾下的內容如下:

這裡列舉一些重要的類檔案:

Route.php檔案

前文中在實現 route.php 的路由排程過程中有出現使用類Route的情況,實際上就是呼叫這裡的類Route的相關方法去實現的。這個 Route 類是一個簡單的路由器,它可以用於處理基於 URI 和 HTTP 方法的請求路由。它支援新增、匹配和分組路由,以及定義引數模式。下面介紹一下部分重要屬性和方法:

Route.php檔案的部分屬性

  • protected static $routes: 儲存所有註冊的路由。
  • protected static $patterns: 儲存所有自定義的引數模式。
  • protected static $groupStack: 儲存當前的路由組屬性。

match 方法

程式碼截圖如下:

match方法將指定的 HTTP 方法、URI 和處理動作新增到路由中。其中,array_map('strtoupper', (array)$methods) 將方法名轉為大寫,便於規範匹配。

any 方法

程式碼截圖如下:

any方法支援任意 HTTP 方法的路由,保證前端呼叫的時候能夠保證所有的基本請求方式都能使用。

各種 HTTP 方法的快捷方式

程式碼截圖如下:

將不同的 HTTP 方法打包在 Route類中,方便實現呼叫。

group 方法和 getGroup 方法

程式碼截圖如下:

group 方法中,定義一個路由組,將傳入的屬性和當前組的屬性合併,然後執行回撥函式。其中,array_pop(self::$groupStack) 在執行完回撥函式後恢復上一個路由組的屬性。
getGroup 方法則是用於獲取當前的路由組屬性。

addRoute 方法

程式碼截圖如下:

該方法將一個新路由新增到 $routes 陣列中,便於後續對路由的檢查。

checkRoute 方法

程式碼截圖如下:

該方法檢查當前請求是否匹配某個路由,並匹配請求方法。同時,使用定義的引數模式替換 URI 模式中的佔位符。然後匹配 URI 和域名,如果匹配成功,將匹配的引數儲存到 $_GET 中。

DB.php 檔案

在編寫程式碼的過程中,如果直接呼叫php中與資料庫相關的語句,可能會導致程式碼可閱讀性差,結構混亂從而加大了系統的維護成本。故使用 DB.php 來統一管理與資料庫相關的互動操作。DB 類是一個封裝了 MySQL 資料庫操作的靜態類,用於簡化資料庫操作並提高程式碼的可讀性和可維護性。它使用 PHP 的 mysqli 擴充套件來與 MySQL 資料庫進行互動。下面介紹一下部分重要屬性和方法:

初始化資料庫連線

初始化Init方法的具體程式碼如下:

該方法初始化與 MySQL 資料庫的連線,並儲存在全域性變數 $uojMySQL 中。並且,使用 mysqli_connect 函式連線資料庫,如果連線失敗,輸出錯誤資訊並終止程式。

SQL 注入防護

escape 方法的具體程式碼如下:

該方法使用 mysqli_real_escape_string 函式對輸入的字串進行轉義,以防止 SQL 注入攻擊。

資料提取方法

fench 方法的具體程式碼如下:

該方法從查詢結果集中獲取一行作為關聯陣列或數字陣列。

基本資料庫操作

基本的增刪改的實現,這裡僅給出實現程式碼,程式碼如下:

資料選擇方法

程式碼如下:

  • select 方法執行查詢並返回結果。
  • selectAll 方法返回查詢結果中的所有行。
  • selectFirst 方法返回查詢結果中的第一行。
  • selectCount 方法返回查詢結果的行數。

檢查表是否存在

checkTableExists 方法的具體程式碼如下:

該方法透過嘗試查詢表中的一行資料來檢查表是否存在。

行數和受影響行數

num_rowsaffected_rows 方法的具體程式碼實現如下:

其中,num_rows 方法返回結果集中行的數量,affected_rows 方法返回上一次查詢中受影響的行數。

相關文章