成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

MVC 框架中的路由器(Router)是如何跑起來的

yagami / 2942人閱讀

摘要:現(xiàn)在當我們執(zhí)行路由器的方法時,它會檢測在當前數(shù)組中是否匹配到路由,如果有,則執(zhí)行這個函數(shù)或回調(diào)函數(shù)。

本文首發(fā)于 MVC 框架中的路由器(Router)是如何跑起來的,轉(zhuǎn)載請注明出處。

說明: 貌似 SF 譯文類別出 BUG,所以本文以原創(chuàng)類別給出。

MVC 路由器(Router)或分發(fā)器(Dispatcher)會檢測 HTTP 請求的 URL,并嘗試將單個 URL 組件與控制器和控制器中定義的方法匹配,同時將所有參數(shù)傳入方法中。

下面給出了一個簡單的路由器類,可以大致闡明路由器是如何工作的。然而在實際項目中,路由器要比下面的示例路由器復雜很多,因為它必須處理更多的東西。

routes[$route] = $closure;
    }

    // 執(zhí)行特定的路由
    function execute()
    {
        $path = $_SERVER["PATH_INFO"];

        /**
        * 檢測給定路由是否被定義,
        * 或者執(zhí)行默認的 "/" 首頁路由。
        */
        if (array_key_exists($path, $this->route)) {
            $this->route[$path]();
        } else {
            $this->route["/]();
        }
    }
}

SimpleRouter 類是 MVC 路由器的簡化模型。它的主要功能是將用戶定義的每個路由添加到數(shù)組中,并執(zhí)行它。要理解它是如何工作的,請將下面的代碼復制到 index.php 文件中。

routes[$route] = $closure;
    }

    // 執(zhí)行特定的路由
    function execute()
    {
        $path = $_SERVER["PATH_INFO"];

        /**
        * 檢測給定路由是否被定義,
        * 或者執(zhí)行默認的 "/" 首頁路由。
        */
        if (array_key_exists($path, $this->route)) {
            $this->route[$path]();
        } else {
            $this->route["/]();
        }
    }
}

/* 創(chuàng)建 Router 實例 */
$router = new SimpleRouter();
 
/* 添加首頁閉包值路由器 */
$router->add_route("/", function(){
    echo "Hello World";
});
 
/* 添加另一個閉包路由 */
$router->add_route("/greetings", function(){
    echo "Greetings, my fellow men.";
});
 
/* 添加可回調(diào)函數(shù)作為路由 */
$router->add_route("/callback", "myFunction");
 
 
/* 回調(diào)函數(shù)處理程序 */
function myFunction(){
    echo "This is a callback function named "" .  __FUNCTION__ .""";
}

/* 執(zhí)行路由 */
$router->execute();

現(xiàn)在到瀏覽器訪問下列 url:

http://localhost/index.php/
http://localhost/index.php/greetings
http://localhost/index.php/callback

對于每個 url,你應(yīng)該會看到在我們的路由中定義的不同消息。那么路由器是如何工作的呢?

在我們的示例中,add_route 方法將 url 的路徑名(route)添加到路由數(shù)組,并且定義對應(yīng)的處理操作。這個處理操作可以是一個簡單的函數(shù)或者回調(diào)函數(shù),作為閉包傳入。現(xiàn)在當我們執(zhí)行路由器的 execute 方法時,它會檢測在當前 $routes 數(shù)組中是否匹配到路由,如果有,則執(zhí)行這個函數(shù)或回調(diào)函數(shù)。

如果你使用 var_dump 這個 $routes 數(shù)組,你可以看到數(shù)組的具體內(nèi)容。對于每個定義的路由都存儲一個閉包與其關(guān)聯(lián)。

array (size=3)
  "/" => 
    object(Closure)[2]
  "/greetings" => 
    object(Closure)[3]
  "/callback" => string "myFunction" (length=10)

執(zhí)行處理由以下幾行完成。$this->routes[$path]** 語句返回一個閉包,該閉包保存在 **$routes 數(shù)組中,用于指定路由的執(zhí)行,注意語句結(jié)尾處的 ()。

$this->routes[$path]();
// 或
$this->routes["/"]();

上面的示例簡單地演示了路由器的工作原理,為了簡單起見,我們沒有處理任何錯誤,也沒有考慮路由的安全性問題。

原文 How do MVC routers work

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/29121.html

相關(guān)文章

  • 淺談MVC,MVP,MVVM漸進變化及React與Vue比較

    摘要:將注意力集中保持在核心庫,而將其他功能如路由和全局狀態(tài)管理交給相關(guān)的庫。此示例使用類似的語法,稱為。執(zhí)行更快,因為它在編譯為代碼后進行了優(yōu)化。基于的模板使得將已有的應(yīng)用逐步遷移到更為容易。 前言 因為沒有明確的界定,這里不討論正確與否,只表達個人對前端MV*架構(gòu)模式理解看法,再比較React和Vue兩種框架不同.寫完之后我知道這文章好水,特別是框架對比部分都是別人說爛的,而我也是打算把...

    DrizzleX 評論0 收藏0
  • 最近想通幾個單頁面應(yīng)用開發(fā)重點

    摘要:老實說我不是第一次想歪了而且很慢總是不能很快抓住要點當別人用后端從做博客做論壇聯(lián)系完成的應(yīng)用的時候我跑去學單頁面應(yīng)用還很久掙扎在的思路當中我想說的是走大多數(shù)人走的路的確是可以減少浪費的時間和錯誤的走少數(shù)人在的路當然也刺激的我最近才明白原來前 老實說我不是第一次想歪了, 而且很慢, 總是不能很快抓住要點. 當別人用后端 MVC 從做博客做論壇, 聯(lián)系完成 MVC 的應(yīng)用的時候 我跑去學單...

    yibinnn 評論0 收藏0
  • Web框架常用架構(gòu)模式(JavaScript語言)

    摘要:只能在不同的時候選用不同的假設(shè)和不同的理論來解釋問題,許來西的文章講到科學一定程度上通過放棄一貫性換取了實用性,放棄自洽性換取了它洽性。然而遺憾的是本身只提供了模塊和洋蔥模型的最小封裝。 在寫干貨之前,我想先探(qiang)討(diao)兩個問題,模式的局限性?模式有什么用? 最近看到一篇文章對我啟發(fā)很大,許來西在知乎的回答《哲學和科學有什么關(guān)聯(lián)?》,全篇較長,這里摘錄我要引出的一點:...

    loostudy 評論0 收藏0
  • express web一款mvc框架

    摘要:相關(guān)的網(wǎng)站開發(fā)有這么常用的四款數(shù)據(jù)層視圖層控制層框架,我們今天說一下阿里的框架是一個自身功能極簡,完全是由路由和中間件構(gòu)成一個的開發(fā)框架安裝創(chuàng)建一個目錄通過命令為你的應(yīng)用創(chuàng)建一個文件。修改請求和響應(yīng)對象。注意只對使用或加載的中間件有效。 express express相關(guān)的網(wǎng)站*http://expressjs.com/*http://www.expressjs.com.cn/*htt...

    _ang 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<