如果您剛開始 PHP 開發之旅, 您很可能在 URL 中使用完整的檔案名稱來導航 應用程序,例如 server/contact.php。不用擔心,我們都是這樣開始的,這就是我們學習的方式。
今天,我想幫助您改進瀏覽文件的方式 應用。我們將討論路由,因為它在任何情況下都至關重要 現代應用。它將幫助你在你的事業上更進一步 專業的PHP開發。
路由系統簡單地對應一個HTTP 向請求處理程序(函數或方法)發出請求。換句話說,它 定義了我們如何導航或存取應用程式的不同部分,而無需 需要輸入檔名。您可以透過建立或設定來做到這一點 路線(或路徑)。例如,路由伺服器/聯絡人允許我們存取 contact.php 檔案。
首先,讓我回想一下什麼路由是。路由 允許我們以更好的方式建立我們的應用程式並擺脫混亂 網址。這是任何優秀路由系統都提供的兩個主要功能:
要做一個路由系統,我們需要一個路由器,這是沒有的超過 我們的應用程式的入口文件。預設情況下,該入口檔案名為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 伺服器的設定檔中完成的。
在繼續之前,讓我們看看專案會是什麼樣子:
檔案結構
使用下面的shell 指令來啟動專案:
mkdir php-routing & cd php-routingtouch index.php .htaccess
前面我們說過重定向是在 PHP 伺服器中完成的 設定檔。因此,您需要根據您的情況進行一些調整 使用 Apache 或 NGINX 伺服器。
在這裡,我們可以輕鬆使用我們已經在專案根目錄中建立的 .htaccess 檔案。新增以下指令:
mkdir php-routing & cd php-routingtouch index.php .htaccess
注意:如果網站或應用程式位於伺服器的根目錄(或如果我們沒有虛擬主機),則.htaccess 應該如下所示:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php
在上面的程式碼中,替換/folder/ 包含您網站的資料夾的名稱。
預設設定檔是 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 語句中使用它。為了程式碼簡潔,我建立了一個變數來保存視圖目錄名稱。
您還會注意到另外兩件事:
現在讓我們在視圖中加入一些虛擬資料。
我們已經在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'];
如您所見,每個文件只包含一個標題和一個段落。隨意添加您喜歡的任何內容並測試路由器。
在本教程中,您學習如何從頭開始創建基本的路由系統,包括:
以上是如何從頭開始為 PHP 應用程式建立路由系統的詳細內容。更多資訊請關注PHP中文網其他相關文章!