[英]Routing page requests with PHP the right way
我需要知道“正確”執行站點導航的術語和最佳實踐嗎? 方式,類似於當您通過 url 提問時 stackoverflow 如何路由您:
“http://stackoverflow.com/questions/ask”
就我的 PHP 編程知識而言,我可能會像這樣編寫代碼:
“http://stackoverflow.com/index.php?p=questions&act=ask”
希望你明白我的意思。 我想知道這種頁面導航和請求/響應處理方法的術語,以及在使用這種標准/方法設計 Web 應用程序時我需要記住的最佳實踐、限制或其他任何內容。 我什至不知道這一切是否都是用 PHP 或一些用 ASP 或 Ruby 編碼的 Web 后端完成的,或者你有什么,所以我用我的猜測填充了標簽。
大多數 MVC 框架使用的模式是調用路由器的前端控制器。 前端控制器通常是您的 Web 根目錄中的index.php
。 接下來,所有不針對現有文件(如 js、css 和圖像資產)的請求都需要發送到此控制器。 在 apache 中,您可以使用mod_rewrite執行此操作:
RewriteRule ^index\.php$ - [F]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . /index.php [L,QSA]
但是,Apache 2.5 中推薦的方法是使用FallbackResource :
FallbackResource index.php
如果您使用的是IIS,它具有類似的功能。
在index.php
中,您可以訪問最初使用$_SERVER['REQUEST_URI']
請求的 URL。 您應該包括您的路由器(它應該在 Web 根目錄之外)並使用請求 URI 調用它。 例子:
require '../router.php';
$router = new Router();
$router->process($_SERVER['HTTP_METHOD'], $_SERVER['REQUEST_URI'], $_GET, $_POST);
然后你的路由器可以找到合適的控制器來路由請求。 閱讀有關MVC 框架的更多信息,並研究一些示例以更好地了解其他人是如何實現它的。
他們很可能使用您在 URL 中描述的相同方法(嵌入導航變量),但它是在“幕后”完成的。
允許您呈現此類 URL 的機制稱為 MOD 重寫。 它使用 URL 中的變量和正則表達式的組合,以更加用戶友好的方式向最終用戶重新表示 URL。
更多信息: http ://httpd.apache.org/docs/current/mod/mod_rewrite.html
編輯:當然這適用於在 apache 網絡服務器上運行的代碼。 其他 Web 服務器(例如 IIS)可能也有類似的模塊。
另外,請注意 mod_rewrite 超出了 php.ini 的范圍。 相反,它實際上是 apache 服務器指令,甚至在 php 發揮作用之前就被調用。
我目前正在開發一個針對極高性能的 php 路由器。 你可能想看看:
Pux 在靜態路由調度方面比 symfony 路由器快 48.5 倍,在正則表達式調度方面快 31 倍。 (安裝了 pux 擴展)
Pux 盡量不消耗計算時間來動態構建所有路由(如 Symfony/Routing)。 相反,Pux 將您的路由編譯為普通的 PHP 數組進行緩存,編譯后的路由可以非常快速地從緩存中加載。
借助 Pux PHP 擴展支持,您可以比純 PHP Pux 快 1.5~2 倍地加載和調度路由。
RouteREST 介紹https://github.com/iPhoneSDKPro/routeREST這是我實現的一個 php 路由器。 它使用 MVC 架構,旨在易於設置和使用。 我在我開發並想與社區分享的項目中使用它。 在某些時候,我想把它變成一個“作曲家”圖書館..有一天..享受-詹姆斯
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.