Web資料夾下的結構
DeerOJ的前端框架參考了部分 Lavarel
框架,做到兼顧程式碼的可維護性和可閱讀性。具體的維護目錄檔案結構如下:
注意到web資料夾下的 index.php
這是整個前端程式的 main
程式 ,當服務段收到請求後, 根據 .htaccess
檔案指定使用 index.php
檔案來生成網頁,並把網頁資料返回到前端進行渲染呈現。
App資料夾下的結構
網頁的生成構造需要一些基本要素,web資料夾下的app資料夾中儲存著大量的基本要素。app資料夾下的檔案結構如下:
資料夾下包含一些子資料夾和檔案,這裡選取一些重要的檔案來進行解析:
route.php檔案
route.php
是整個前端程式的路由, index.php
會把前端傳送的路由資訊傳遞給route.php
,檔案會根據傳送的路由資訊,結合 model
資料夾下的 Route.php
呼叫對應的php程式,從而來實現生成網頁(HTML檔案)的功能。具體解析如下:
路由模式定義
給出如下程式碼
這些模式定義了 URL 引數的格式。比如,username
只能包含字母、數字和下劃線,長度在 1 到 20 之間;id
和 contest_id
是數字,長度在 1 到 10 之間;rand_str_id
是一個長度為 20 的字串,由數字和大小寫字母組成。
路由組定義
這個路由組限定了所有路由都在指定域名下可用。UOJConfig::$data['web']['main']['host']
獲取的是配置中的主機名。
具體路由配置
這些路由使用 Route::any
方法配置,表示無論是 GET
還是 POST
請求,都會路由到對應的 PHP 檔案。例如,請求根路徑 /
會被路由到 index.php
處理,請求 /problems
會被路由到 problem_set.php
處理。
使用者相關路由
這些路由處理使用者登入、註冊、忘記密碼、重置密碼,以及檢視和修改使用者資訊等操作。
評測相關路由
這些路由處理與評測系統相關的操作,例如提交評測任務、同步評測客戶端、下載提交記錄、臨時檔案、題目和評測器等。