幾天前,我學會了建立一個將 URL 對應到控制器的基本路由器。現在,我需要增強它以建立一個具有高級功能的更好的路由器。要建立一個更好的可處理隱藏輸入的路由器,首先從專案中刪除基本的 router.php 檔案並建立一個新的。讓我們開始吧。
我們需要建立一個更好的路由器,有效地將 URL 對應到特定的控制器或操作,從而允許我們的應用程式處理請求並將它們路由到適當的處理程序。
更好的路由器能夠處理隱藏輸入,透過將筆記 ID 傳遞到控制器而不將其暴露在 URL 中,從而實現安全筆記刪除,從而防止使用者乾擾。
<input type="hidden" name="_method" value="DELETE">
要建立路由器文件,我們必須使用命名空間初始化 Router 類,在本例中為 Core。
<?php namespace Core; class Router { }
建立路由器類別後,我們必須在其中定義公共函數,並且所有函數都具有相同的參數,例如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(); }
在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 映射到特定的控制器方法,從而實現更加結構化和可維護的方法來處理請求並提高我們網站的整體性能和可擴展性。
希望您已經清楚地理解了。
以上是建立更好的路由器:處理隱藏輸入和刪除請求的詳細內容。更多資訊請關注PHP中文網其他相關文章!