」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 建立更好的路由器:處理隱藏輸入和刪除請求

建立更好的路由器:處理隱藏輸入和刪除請求

發佈於2024-07-31
瀏覽:445

Creating a Better Router : Handling HIDDEN Inputs and DELETE request

幾天前,我學會了建立一個將 URL 對應到控制器的基本路由器。現在,我需要增強它以建立一個具有高級功能的更好的路由器。要建立一個更好的可處理隱藏輸入的路由器,首先從專案中刪除基本的 router.php 檔案並建立一個新的。開始吧。

路由簡介

我們需要建立一個更好的路由器,有效地將 URL 對應到特定的控制器或操作,從而允許我們的應用程式處理請求並將它們路由到適當的處理程序。
更好的路由器能夠處理隱藏輸入,透過將筆記 ID 傳遞到控制器而不將其暴露在 URL 中,從而實現安全筆記刪除,從而防止使用者乾擾。


建立路由器文件

要建立路由器文件,我們必須使用命名空間初始化 Router 類,在本例中為 Core。





公共函數(公共參數)

隨著路由器類別的構建,我們必須在其中定義公共函數,並且所有函數都具有相同的參數,例如get、post、delete、patch 和put 作為基本路由,幫助我們的網站確定當有人訪問某個特定內容時要執行的操作頁。這些函數具有相同的參數,使它們能夠執行相同的操作。

public function get($uri, $controller) {
 $this->add('GET', $uri, $controller); }
public function post($uri, $controller) {
 $this->add('POST', $uri, $controller); }
public function delete($uri, $controller) { 
$this->add('DELETE', $uri, $controller); }
public function patch($uri, $controller) { 
$this->add('PATCH', $uri, $controller); }
public function put($uri, $controller) { $this->add('PUT', $uri, $controller); }

添加方法

由於所有公共函數都具有相同的參數,因此我們使用 add 方法並為其提供相同的參數,並且僅在其他函數中呼叫它。它用於向路由映射新增路由,採用三個參數:請求方法、要匹配的 URI 模式以及處理請求的控制器檔案。

public function add($method, $uri, $controller) { 
  $this->routes[] = [ 
    'uri' => $uri, 
    'controller' => $controller, 
    'method' => $method 
  ]; 
}

路線方法

在這裡,我們定義了路由方法來確定應用程式對給定 URL 的回應,並將其映射到相應的控制器來處理請求。

public function route($uri, $method) { 
  foreach ($this->routes as $route) { 
    if ($route['uri'] === $uri && $route['method'] === strtoupper($method)) { 
      return require base_path($route['controller']); 
    } 
  } 
  $this->abort(); 
}

strtoupper 函數

在route方法中,我們使用strtoupper函數將字串轉換為大寫,確保不區分大小寫的匹配。

strtoupper($method)

保護功能(中止)

在 router.php 檔案中,我們將 abort 方法定義為安全網,如果我們的網站找不到正確的路由,則顯示錯誤頁面。

protected function abort($code = 404) { 
  http_response_code($code); 
  require base_path("views/{$code}.php"); 
  die(); 
}

路線定義

最後一件事是在routes.php檔案中定義路由配置,將URL對應到對應的控制器操作。

$router->get('/', 'controllers/index.php'); 
$router->get('/about', 'controllers/about.php'); 
$router->get('/contact', 'controllers/contact.php'); 
$router->get('/notes', 'controllers/notes/index.php'); 
$router->get('/note', 'controllers/notes/show.php'); 
$router->get('/notes/create', 'controllers/notes/create.php');

get 方法指定請求方法(GET)、URL 模式並將其對應到控制器檔案。

結論

總而言之,我們建立了一個更好的路由器,可以有效地將URL 映射到特定的控制器方法,從而實現更加結構化和可維護的方法來處理請求並提高我們網站的整體效能和可擴展性。

希望您已經清楚地理解了。

版本聲明 本文轉載於:https://dev.to/ghulam_mujtaba_247/creating-a-better-router-handling-hidden-inputs-and-delete-request-ei7?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • MySQL中如何高效地根據兩個條件INSERT或UPDATE行?
    MySQL中如何高效地根據兩個條件INSERT或UPDATE行?
    在兩個條件下插入或更新或更新 solution:的答案在於mysql的插入中...在重複鍵更新語法上。如果不存在匹配行或更新現有行,則此功能強大的功能可以通過插入新行來進行有效的數據操作。如果違反了唯一的密鑰約束。 實現所需的行為,該表必須具有唯一的鍵定義(在這種情況下為'名稱'...
    程式設計 發佈於2025-06-29
  • 如何使用Python理解有效地創建字典?
    如何使用Python理解有效地創建字典?
    在python中,詞典綜合提供了一種生成新詞典的簡潔方法。儘管它們與列表綜合相似,但存在一些顯著差異。 與問題所暗示的不同,您無法為鑰匙創建字典理解。您必須明確指定鍵和值。 For example:d = {n: n**2 for n in range(5)}This creates a dict...
    程式設計 發佈於2025-06-29
  • 切換到MySQLi後CodeIgniter連接MySQL數據庫失敗原因
    切換到MySQLi後CodeIgniter連接MySQL數據庫失敗原因
    Unable to Connect to MySQL Database: Troubleshooting Error MessageWhen attempting to switch from the MySQL driver to the MySQLi driver in CodeIgniter,...
    程式設計 發佈於2025-06-29
  • 您如何在Laravel Blade模板中定義變量?
    您如何在Laravel Blade模板中定義變量?
    在Laravel Blade模板中使用Elegance 在blade模板中如何分配變量對於存儲以後使用的數據至關重要。在使用“ {{}}”分配變量的同時,它可能並不總是最優雅的解決方案。 幸運的是,Blade通過@php Directive提供了更優雅的方法: $ old_section =...
    程式設計 發佈於2025-06-29
  • 在Python中如何創建動態變量?
    在Python中如何創建動態變量?
    在Python 中,動態創建變量的功能可以是一種強大的工具,尤其是在使用複雜的數據結構或算法時,Dynamic Variable Creation的動態變量創建。 Python提供了幾種創造性的方法來實現這一目標。 利用dictionaries 一種有效的方法是利用字典。字典允許您動態創建密鑰並...
    程式設計 發佈於2025-06-29
  • Go語言如何動態發現導出包類型?
    Go語言如何動態發現導出包類型?
    與反射軟件包中的有限類型的發現能力相反,本文探討了在運行時發現所有包裝類型(尤其是struntime go import( “ FMT” “去/進口商” ) func main(){ pkg,err:= incorter.default()。導入(“ time”) ...
    程式設計 發佈於2025-06-29
  • 如何使用PHP從XML文件中有效地檢索屬性值?
    如何使用PHP從XML文件中有效地檢索屬性值?
    從php PHP陷入困境。 使用simplexmlelement :: attributes()函數提供了簡單的解決方案。此函數可訪問對XML元素作為關聯數組的屬性: - > attributes()為$ attributeName => $ attributeValue){ echo...
    程式設計 發佈於2025-06-29
  • 大批
    大批
    [2 數組是對象,因此它們在JS中也具有方法。 切片(開始):在新數組中提取部分數組,而無需突變原始數組。 令ARR = ['a','b','c','d','e']; // USECASE:提取直到索引作...
    程式設計 發佈於2025-06-29
  • 如何高效地在一個事務中插入數據到多個MySQL表?
    如何高效地在一個事務中插入數據到多個MySQL表?
    mySQL插入到多個表中,該數據可能會產生意外的結果。雖然似乎有多個查詢可以解決問題,但將從用戶表的自動信息ID與配置文件表的手動用戶ID相關聯提出了挑戰。 使用Transactions和last_insert_id() 插入用戶(用戶名,密碼)值('test','tes...
    程式設計 發佈於2025-06-29
  • HTML格式標籤
    HTML格式標籤
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    程式設計 發佈於2025-06-29
  • 如何簡化PHP中的JSON解析以獲取多維陣列?
    如何簡化PHP中的JSON解析以獲取多維陣列?
    php 試圖在PHP中解析JSON數據的JSON可能具有挑戰性,尤其是在處理多維數組時。 To simplify the process, it's recommended to parse the JSON as an array rather than an object.To do...
    程式設計 發佈於2025-06-29
  • 為什麼不````''{margin:0; }`始終刪除CSS中的最高邊距?
    為什麼不````''{margin:0; }`始終刪除CSS中的最高邊距?
    在CSS 問題:不正確的代碼: 全球範圍將所有餘量重置為零,如提供的代碼所建議的,可能會導致意外的副作用。解決特定的保證金問題是更建議的。 例如,在提供的示例中,將以下代碼添加到CSS中,將解決餘量問題: body H1 { 保證金頂:-40px; } 此方法更精確,避免了由全局保證金重置...
    程式設計 發佈於2025-06-29
  • 對象擬合:IE和Edge中的封面失敗,如何修復?
    對象擬合:IE和Edge中的封面失敗,如何修復?
    To resolve this issue, we employ a clever CSS solution that solves the problem:position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%)...
    程式設計 發佈於2025-06-29
  • 解決Spring Security 4.1及以上版本CORS問題指南
    解決Spring Security 4.1及以上版本CORS問題指南
    彈簧安全性cors filter:故障排除常見問題 在將Spring Security集成到現有項目中時,您可能會遇到與CORS相關的錯誤,如果像“訪問Control-allo-allow-Origin”之類的標頭,則無法設置在響應中。為了解決此問題,您可以實現自定義過濾器,例如代碼段中的MyFi...
    程式設計 發佈於2025-06-29

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3