首頁 > 後端開發 > php教程 > 如何從頭開始為 PHP 應用程式建立路由系統

如何從頭開始為 PHP 應用程式建立路由系統

PHP中文网
發布: 2024-11-29 16:23:53
轉載
191 人瀏覽過

如果您剛開始 PHP 開發之旅, 您很可能在 URL 中使用完整的檔案名稱來導航 應用程序,例如 server/contact.php。不用擔心,我們都是這樣開始的,這就是我們學習的方式。

今天,我想幫助您改進瀏覽文件的方式 應用。我們將討論路由,因為它在任何情況下都至關重要 現代應用。它將幫助你在你的事業上更進一步 專業的PHP開發。

路由系統簡單地對應一個HTTP 向請求處理程序(函數或方法)發出請求。換句話說,它 定義了我們如何導航或存取應用程式的不同部分,而無需 需要輸入檔名。您可以透過建立或設定來做到這一點 路線(或路徑)。例如,路由伺服器/聯絡人允許我們存取 contact.php 檔案。

截屏2024-11-29 16.11.16.png

路由如何運作

首先,讓我回想一下什麼路由是。路由 允許我們以更好的方式建立我們的應用程式並擺脫混亂 網址。這是任何優秀路由系統都提供的兩個主要功能:

  • 定義為每個傳入請求執行哪個操作。
  • 產生SEO 友善的URL(例如/views/users 而不是views/user.php?all).

要做一個路由系統,我們需要一個路由器,這是沒有的超過 我們的應用程式的入口文件。預設情況下,該入口檔案名為index.php。在檔案內部,我們透過 [switch](https://www.php.net/manual/en/control-structs.switch.php) 或 [match](https://www.php) 定義了路由系統。 net/manual/en/control-structs.match.php) 語句。

最後但並非最不重要的一點是,我們必須將所有請求重新導向到路由器。這是在 PHP 伺服器的設定檔中完成的。

專案設定

在繼續之前,讓我們看看專案會是什麼樣子:

如何從頭開始為 PHP 應用程式建立路由系統檔案結構

使用下面的shell 指令來啟動專案:

mkdir php-routing & cd php-routingtouch index.php .htaccess
登入後複製
登入後複製
登入後複製
  • .htaccess:目錄級Apache設定檔。如果使用 NGINX 伺服器則不需要它。
  • index.php:這是專案的路由器和入口檔案。所有傳入請求都將重定向到此處。
  • views:此資料夾包含項目的所有 UI。

如何將所有 HTTP 請求重新導向到路由器

前面我們說過重定向是在 PHP 伺服器中完成的 設定檔。因此,您需要根據您的情況進行一些調整 使用 Apache 或 NGINX 伺服器。

使用 Apache 重定向

在這裡,我們可以輕鬆使用我們已經在專案根目錄中建立的 .htaccess 檔案。新增以下指令:

mkdir php-routing & cd php-routingtouch index.php .htaccess
登入後複製
登入後複製
登入後複製
  • 第 1 行:我們啟動 Apache 伺服器的執行時間重寫引擎。
  • 第 2 行:我們限制實體檔案的存取。
  • 第3行:我們將所有即將到來的請求重定向到index.php。

注意:如果網站或應用程式位於伺服器的根目錄(或如果我們沒有虛擬主機),則.htaccess 應該如下所示:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php
登入後複製
登入後複製

在上面的程式碼中,替換/folder/ 包含您網站的資料夾的名稱。

使用 NGINX 重新導向

預設設定檔是 name nginx.conf。該檔案可以在 etc/nginx、usr/local/nginx/conf 或 /usr/local/etc/nginx 中找到。

要重定向到index.php,請使用以下命令:

RewriteEngine On
RewriteBase /folder/
RewriteRule ^index\.php$ - [L]RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /folder/index.php [L]
登入後複製
登入後複製

位置 / 區塊指定這是所有位置的匹配,除非明確指定位置 /

try_files 指令告訴伺服器,對於與該位置中的區塊相符的 URI 的任何請求,首先嘗試 $uri(或 $uri/),如果檔案存在,則提供該檔案。否則,將使用後備選項 (index.php)。最後的行為就是我們想要的。

修改後重新載入伺服器。

如何建立路由系統

我們現在知道路由是如何運作的,而且我們正在甚至發送所有請求 到路由器。現在是時候在index.php中編寫路由器的程式碼了。

首先,建立一個變數來保存HTTP請求字串:

location / {
        try_files $uri $uri/ /index.php}
登入後複製
登入後複製

這個變數將幫助我們進行比較有很多路線(路徑)並呼叫對應的視圖介面。

$request = $_SERVER['REQUEST_URI'];
登入後複製
登入後複製

這裡發生了什麼事? switch 語句類似於同一表達式(變數)上的一系列 if 語句。只有當找到其表達式計算結果與 switch 表達式的值相符的 case 語句時,它才會執行程式碼。讓我來說明一下,以便您能夠很好地理解它。

讓我們假設我們的變數保存值 /views/users/。當上面的程式碼執行時,PHP 會檢查值 /views/users 是否等於 case 語句的值,在我們的例子中是 /views/users。因此,此條件將評估為 true,PHP 將呼叫檔案 /views/users.php。如果條件計算結果為 false,PHP 將檢查下一個 case 語句,直到 switch 區塊結束。

注意:每次 case 語句計算結果為 true,PHP 將繼續執行以下 case 中的程式碼陳述而無需評估這些案例陳述。在我們的例子中,PHP 還需要views/dep.php。為了避免這種“不良行為”,您必須在每個 case 語句後面加上 break 語句。

現在將所有內容放入我們的 index.php 檔案中:

mkdir php-routing & cd php-routingtouch index.php .htaccess
登入後複製
登入後複製
登入後複製

如您所知,我們首先將使用者請求儲存在 $request 變數中,然後在 switch 語句中使用它。為了程式碼簡潔,我建立了一個變數來保存視圖目錄名稱。

您還會注意到另外兩件事:

  • 「」和「/」當使用者位於應用程式或網站的根目錄時,用於匹配site.com 以及site.com/。
  • 有一個特殊的 case 語句,默認,匹配任何與其他情況不匹配的內容,即當路線未知時。

現在讓我們在視圖中加入一些虛擬資料。

在Views 檔案

我們已經在views 目錄中建立了所有檔案。讓我們移動到這個目錄並在每個文件中添加一些內容。

只需在每個文件中添加一些內容:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php
登入後複製
登入後複製
RewriteEngine On
RewriteBase /folder/
RewriteRule ^index\.php$ - [L]RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /folder/index.php [L]
登入後複製
登入後複製
location / {
        try_files $uri $uri/ /index.php}
登入後複製
登入後複製
$request = $_SERVER['REQUEST_URI'];
登入後複製
登入後複製

如您所見,每個文件只包含一個標題和一個段落。隨意添加您喜歡的任何內容並測試路由器。

最終想法

在本教程中,您學習如何從頭開始創建基本的路由系統,包括:

  • 如何在專案根目錄建立一個名為index.php的文件。這是您的應用程式的路由器。
  • 如何將所有傳入請求重新導向至路由器。您可以在伺服器的設定檔中執行此操作。
  • 如何在路由器中使用 switch 語句建立路由系統。

以上是如何從頭開始為 PHP 應用程式建立路由系統的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
php
來源:freecodecamp.org
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板