国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
路由如何工作
項目設(shè)置
如何將所有 HTTP 請求重定向到路由器
使用 Apache 重定向
使用 NGINX 重定向
如何創(chuàng)建路由系統(tǒng)
在Views 文件
最終想法
首頁 后端開發(fā) php教程 如何從頭開始為 PHP 應(yīng)用程序構(gòu)建路由系統(tǒng)

如何從頭開始為 PHP 應(yīng)用程序構(gòu)建路由系統(tǒng)

Nov 29, 2024 pm 04:23 PM
php

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

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

路由系統(tǒng)簡單地映射一個HTTP 向請求處理程序(函數(shù)或方法)發(fā)出請求。換句話說,它 定義了我們?nèi)绾螌Ш交蛟L問應(yīng)用程序的不同部分,而無需 需要輸入文件名。您可以通過創(chuàng)建或設(shè)置來做到這一點 路線(或路徑)。例如,路由服務(wù)器/聯(lián)系人允許我們訪問 contact.php 文件。

截屏2024-11-29 16.11.16.png

路由如何工作

首先,讓我回憶一下什么路由是。路由 允許我們以更好的方式構(gòu)建我們的應(yīng)用程序并擺脫混亂 網(wǎng)址。這是任何優(yōu)秀路由系統(tǒng)都提供的兩個主要功能:

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

要做一個路由系統(tǒng),我們需要一個路由器,這是沒有的超過 我們的應(yīng)用程序的入口文件。默認情況下,該入口文件名為index.php。在文件內(nèi)部,我們通過 [switch](https://www.php.net/manual/en/control-structs.switch.php) 或 [match](https://www.php) 定義了路由系統(tǒng)。 net/manual/en/control-structs.match.php) 語句。

最后但并非最不重要的一點是,我們必須將所有請求重定向到路由器。這是在 PHP 服務(wù)器的配置文件中完成的。

項目設(shè)置

在繼續(xù)之前,讓我們看看項目會是什么樣子:

如何從頭開始為 PHP 應(yīng)用程序構(gòu)建路由系統(tǒng)文件結(jié)構(gòu)

使用下面的 shell 命令來啟動項目:

mkdir?php-routing?&?cd?php-routingtouch?index.php?.htaccess
  • .htaccess:目錄級 Apache 配置文件。如果使用 NGINX 服務(wù)器則不需要它。
  • index.php:這是項目的路由器和入口文件。所有傳入請求都將重定向到此處。
  • views:此文件夾包含項目的所有 UI。

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

前面我們說過重定向是在 PHP 服務(wù)器中完成的 配置文件。因此,您需要根據(jù)您的情況進行一些調(diào)整 使用 Apache 或 NGINX 服務(wù)器。

使用 Apache 重定向

在這里,我們可以輕松使用我們已經(jīng)在項目根目錄中創(chuàng)建的 .htaccess 文件。添加以下指令:

mkdir?php-routing?&?cd?php-routingtouch?index.php?.htaccess
  • 第 1 行:我們激活 Apache 服務(wù)器的運行時重寫引擎。
  • 第 2 行:我們限制對物理文件的訪問。
  • 第3行:我們將所有即將到來的請求重定向到index.php。

注意:如果站點或應(yīng)用程序位于服務(wù)器的根目錄(或者如果我們沒有虛擬主機),則 .htaccess 應(yīng)該如下所示:

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 指令告訴服務(wù)器,對于與該位置中的塊匹配的 URI 的任何請求,首先嘗試 $uri(或 $uri/),如果文件存在,則提供該文件。否則,將使用后備選項 (index.php)。最后的行為就是我們想要的。

修改后重新加載服務(wù)器。

如何創(chuàng)建路由系統(tǒng)

我們現(xiàn)在知道路由是如何工作的,并且我們正在甚至發(fā)送所有請求 到路由器?,F(xiàn)在是時候在index.php中編寫路由器的代碼了。

首先,創(chuàng)建一個變量來保存HTTP請求字符串:

location?/?{
????????try_files?$uri?$uri/?/index.php}

這個變量將幫助我們進行比較有很多路線(路徑)并調(diào)用相應(yīng)的視圖接口。

$request?=?$_SERVER['REQUEST_URI'];

這里發(fā)生了什么? switch 語句類似于同一表達式(變量)上的一系列 if 語句。僅當找到其表達式計算結(jié)果與 switch 表達式的值匹配的 case 語句時,它才執(zhí)行代碼。讓我來說明一下,以便您能夠很好地理解它。

讓我們假設(shè)我們的變量保存值 /views/users/。當上面的代碼運行時,PHP 將檢查值 /views/users 是否等于 case 語句的值,在我們的例子中是 /views/users。因此,此條件將評估為 true,PHP 將調(diào)用文件 /views/users.php。如果條件計算結(jié)果為 false,PHP 將檢查下一個 case 語句,直到 switch 塊結(jié)束。

注意:每次 case 語句計算結(jié)果為 true,PHP 將繼續(xù)執(zhí)行以下 case 中的代碼陳述而無需評估這些案例陳述。在我們的例子中,PHP 還需要views/dep.php。為了避免這種“不良行為”,您必須在每個 case 語句后添加 break 語句。

現(xiàn)在將所有內(nèi)容放入我們的 index.php 文件中:

mkdir?php-routing?&?cd?php-routingtouch?index.php?.htaccess

如您所知,我們首先將用戶請求存儲在 $request 變量中,然后在 switch 語句中使用它。為了代碼簡潔,我創(chuàng)建了一個變量來保存視圖目錄名稱。

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

  • “”和“/”當用戶位于應(yīng)用程序或網(wǎng)站的根目錄時,用于匹配 site.com 以及 site.com/。
  • 有一個特殊的 case 語句,默認,匹配任何與其他情況不匹配的內(nèi)容,即當路線未知時。

現(xiàn)在讓我們在視圖中添加一些虛擬數(shù)據(jù)。

在Views 文件

我們已經(jīng)在views 目錄中創(chuàng)建了所有文件。讓我們移動到這個目錄并在每個文件中添加一些內(nèi)容。

只需在每個文件中添加一些內(nèi)容:

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'];

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

最終想法

在本教程中,您學習了如何從頭開始創(chuàng)建基本的路由系統(tǒng),包括:

  • 如何在項目根目錄創(chuàng)建一個名為index.php的文件。這是您的應(yīng)用程序的路由器。
  • 如何將所有傳入請求重定向到路由器。您可以在服務(wù)器的配置文件中執(zhí)行此操作。
  • 如何在路由器中使用 switch 語句創(chuàng)建路由系統(tǒng)。

以上是如何從頭開始為 PHP 應(yīng)用程序構(gòu)建路由系統(tǒng)的詳細內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔相應(yīng)法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

如何在PHP中獲取當前的會話ID? 如何在PHP中獲取當前的會話ID? Jul 13, 2025 am 03:02 AM

在PHP中獲取當前會話ID的方法是使用session_id()函數(shù),但必須先調(diào)用session_start()才能成功獲取。1.調(diào)用session_start()啟動會話;2.使用session_id()讀取會話ID,輸出類似abc123def456ghi789的字符串;3.若返回為空,檢查是否遺漏session_start()、用戶是否首次訪問或會話是否被銷毀;4.會話ID可用于日志記錄、安全驗證和跨請求通信,但需注意安全性。確保正確開啟會話后即可順利獲取ID。

php從字符串獲取子字符串 php從字符串獲取子字符串 Jul 13, 2025 am 02:59 AM

要從PHP字符串中提取子字符串,可使用substr()函數(shù),其語法為substr(string$string,int$start,?int$length=null),若未指定長度則截取至末尾;處理多字節(jié)字符如中文時應(yīng)使用mb_substr()函數(shù)以避免亂碼;若需根據(jù)特定分隔符截取字符串,可使用explode()或結(jié)合strpos()與substr()實現(xiàn),例如提取文件名擴展名或域名。

如何將字符串分為PHP中的數(shù)組 如何將字符串分為PHP中的數(shù)組 Jul 13, 2025 am 02:59 AM

在PHP中,最常用的方法是使用explode()函數(shù)將字符串拆分為數(shù)組。該函數(shù)通過指定的分隔符將字符串分割成多個部分并返回數(shù)組,語法為explode(separator,string,limit),其中separator為分隔符,string為原字符串,limit為可選參數(shù)控制最大分割數(shù)量。例如$str="apple,banana,orange";$arr=explode(",",$str);結(jié)果為["apple","bana

JavaScript數(shù)據(jù)類型:原始與參考 JavaScript數(shù)據(jù)類型:原始與參考 Jul 13, 2025 am 02:43 AM

JavaScript的數(shù)據(jù)類型分為原始類型和引用類型。原始類型包括string、number、boolean、null、undefined和symbol,其值不可變且賦值時復制副本,因此互不影響;引用類型如對象、數(shù)組和函數(shù)存儲的是內(nèi)存地址,指向同一對象的變量會相互影響。判斷類型可用typeof和instanceof,但需注意typeofnull的歷史問題。理解這兩類差異有助于編寫更穩(wěn)定可靠的代碼。

在C中使用std :: Chrono 在C中使用std :: Chrono Jul 15, 2025 am 01:30 AM

std::chrono在C 中用于處理時間,包括獲取當前時間、測量執(zhí)行時間、操作時間點與持續(xù)時間及格式化解析時間。1.獲取當前時間使用std::chrono::system_clock::now(),可轉(zhuǎn)換為可讀字符串但系統(tǒng)時鐘可能不單調(diào);2.測量執(zhí)行時間應(yīng)使用std::chrono::steady_clock以確保單調(diào)性,并通過duration_cast轉(zhuǎn)換為毫秒、秒等單位;3.時間點(time_point)和持續(xù)時間(duration)可相互操作,但需注意單位兼容性和時鐘紀元(epoch)

如何將會話變量傳遞給PHP中的另一頁? 如何將會話變量傳遞給PHP中的另一頁? Jul 13, 2025 am 02:39 AM

在PHP中,要將一個會話變量傳到另一個頁面,關(guān)鍵在于正確開啟會話并使用相同的$_SESSION鍵名。1.每個頁面使用session變量前必須調(diào)用session_start(),且放在腳本最前面;2.在第一個頁面設(shè)置session變量如$_SESSION['username']='JohnDoe';3.在另一頁面同樣調(diào)用session_start()后通過相同鍵名訪問變量;4.確保每個頁面都調(diào)用session_start()、避免提前輸出內(nèi)容、檢查服務(wù)器上session存儲路徑可寫;5.使用ses

PHP如何處理環(huán)境變量? PHP如何處理環(huán)境變量? Jul 14, 2025 am 03:01 AM

toAccessenvironmentVariablesInphp,useGetenv()或$ _envsuperglobal.1.getEnv('var_name')retievesSpecificvariable.2。$ _ en v ['var_name'] accessesvariablesifvariables_orderInphp.iniincludes“ e” .setVariablesViaCliWithvar = vualitephpscript.php,inapach

See all articles