幾天前,我學會了建立一個將 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 映射到特定的控制器方法,從而實現更加結構化和可維護的方法來處理請求並提高我們網站的整體效能和可擴展性。
希望您已經清楚地理解了。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3