教你利用composer實(shí)現(xiàn)路由加載

下面由composer教程欄目給大家介紹利用composer實(shí)現(xiàn)路由加載,希望對(duì)需要的朋友有所幫助!

教你利用composer實(shí)現(xiàn)路由加載

本教程示例代碼見(jiàn) https://github.com/johnlui/My-First-Framework-based-on-Composer

久負(fù)盛名的 CodeIgniter 框架是很多人的 PHP 開(kāi)發(fā)入門(mén)框架,同樣也是我開(kāi)始學(xué)習(xí)如何從頭構(gòu)建一個(gè)網(wǎng)站的框架。在 CI 中我學(xué)到了很多,其中對(duì) MVC 的深入理解和對(duì)框架本質(zhì)的理解對(duì)我的影響最大。從使用框架是為了提高開(kāi)發(fā)效率的角度來(lái)看,框架的本質(zhì)就是路由。

推薦 https://github.com/NoahBuscher/Macaw,對(duì)應(yīng)的 Composer 包為 noahbuscher/macaw 。

下面開(kāi)始安裝它,更改 composer.json:

 "require": {     "noahbuscher/macaw": "dev-master"   },

運(yùn)行 composer install,成功之后得到以下目錄

教你利用composer實(shí)現(xiàn)路由加載

至此,Macaw 包安裝成功!

下面,就是見(jiàn)證奇跡的時(shí)刻!我們將賦予 MFFC 生命力,讓它真正地跑起來(lái)!

1:新建 App/config 文件夾,在里面新建 routs.php 文件,內(nèi)容如下:
教你利用composer實(shí)現(xiàn)路由加載

2:在入口文件index.php中 加載routs.php 文件
教你利用composer實(shí)現(xiàn)路由加載

Macaw 的文檔位于 https://github.com/NoahBuscher/Macaw,請(qǐng)按照你的 HTTP 服務(wù)軟件類(lèi)型自行設(shè)置偽靜態(tài),其實(shí)跟絕大多數(shù)框架一樣:“將所有非靜態(tài)文件全部指向 index.php”。

配置成功后訪問(wèn)域名:
教你利用composer實(shí)現(xiàn)路由加載

如果頁(yè)面亂碼,請(qǐng)調(diào)整編碼為 UTF-8。如果你成功看到以上頁(yè)面,那么恭喜你,路由配置成功!

Macaw 只有一個(gè)文件,去除空行總共也就一百行多一點(diǎn),通過(guò)代碼我們能直接看明白它是怎么工作的。下面我簡(jiǎn)略分析一下:

  1. Composer 的自動(dòng)加載在每次 URL 驅(qū)動(dòng) MFFC/public/index.php 之后會(huì)在內(nèi)存中維護(hù)一個(gè)全量命名空間類(lèi)名到文件名的數(shù)組,這樣當(dāng)我們?cè)诖a中使用某個(gè)類(lèi)的時(shí)候,將自動(dòng)載入該類(lèi)所在的文件。
  2. 我們?cè)诼酚晌募休d入了 Macaw 類(lèi):“use NoahBuscherMacawMacaw;”,接著調(diào)用了兩次靜態(tài)方法 ::get(),這個(gè)方法是不存在的,將由 MFFC/vendor/codingbean/macaw/Macaw.php 中的 __callstatic() 接管。

  3. 這個(gè)函數(shù)接受兩個(gè)參數(shù),method” role=”presentation” style=”position: relative;”>methodparams,前者是具體的 function 名稱(chēng),在這里就是 get,后者是這次調(diào)用傳遞的參數(shù),即 Macaw::get(‘fuck’,function(){…}) 中的兩個(gè)參數(shù)。第一個(gè)參數(shù)是我們想要監(jiān)聽(tīng)的 URL 值,第二個(gè)參數(shù)是一個(gè) PHP 閉包,作為回調(diào),代表 URL 匹配成功后我們想要做的事情。

  4. __callstatic() 做的事情也很簡(jiǎn)單,分別將目標(biāo)URL(即 /fuck)、HTTP方法(即 GET)和回調(diào)代碼壓入 routes” role=”presentation” style=”position: relative;”>routesmethods 和 $callbacks 三個(gè) Macaw 類(lèi)的靜態(tài)成員變量(數(shù)組)中。

  5. 路由文件最后一行的 Macaw::dispatch(); 方法才是真正處理當(dāng)前 URL 的地方。能直接匹配到的會(huì)直接調(diào)用回調(diào),不能直接匹配到的將利用正則進(jìn)行匹配。

以上就是教你利用

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊8 分享