摘要:原文發(fā)表在我的個人網(wǎng)站利用一步一步構(gòu)建自己的框架二構(gòu)建路由本教程示例代碼見上一篇中我們已經(jīng)建立了一個空的項目,本篇將講述如何構(gòu)建路由。從使用框架是為了提高開發(fā)效率的角度來看,框架的本質(zhì)就是路由。下一步利用一步一步構(gòu)建自己的框架三設(shè)計
原文發(fā)表在我的個人網(wǎng)站 利用 Composer 一步一步構(gòu)建自己的 PHP 框架(二)——構(gòu)建路由
本教程示例代碼見 https://github.com/johnlui/My-First-Framework-based-on-Composer
上一篇中我們已經(jīng)建立了一個空的 Composer 項目,本篇將講述如何構(gòu)建路由。
久負(fù)盛名的 CodeIgniter 框架是很多人的 PHP 開發(fā)入門框架,同樣也是我開始學(xué)習(xí)如何從頭構(gòu)建一個網(wǎng)站的框架。在 CI 中我學(xué)到了很多,其中對 MVC 的深入理解和對框架本質(zhì)的理解對我的影響是最大的。從使用框架是為了提高開發(fā)效率的角度來看,框架的本質(zhì)就是路由。
下面我們就開始自己來構(gòu)建路由,先去 GitHub 搜一下:點此查看搜索結(jié)果
推薦 https://github.com/NoahBuscher/Macaw,對應(yīng)的 Composer 包為 codingbean/macaw ,作者應(yīng)該是在 GitHub 上改名了,這可能會造成一定的困擾。下面開始安裝 Macaw 包,更改 composer.json:
{ "require": { "codingbean/macaw": "dev-master" } }
運行 composer update,成功之后將得到以下目錄:
至此,Macaw 包安裝成功!
下面,就是見證奇跡的時刻!我們將賦予 MFFC 生命力,讓它真正地跑起來!
新建 MFFC/public 文件夾,這個文件夾將是用戶唯一可見的部分。在文件夾下新建 index.php 文件:
上面一行表示引入 Composer 的自動載入功能,下面一行表示載入路由配置文件。新建 MFFC/config 文件夾,在里面新建 routs.php 文件,內(nèi)容如下:
".$fu; }); Macaw::dispatch();Macaw 的文檔位于 https://github.com/NoahBuscher/Macaw,請按照你的 HTTP 服務(wù)軟件類型自行設(shè)置偽靜態(tài),其實跟絕大多數(shù)框架一樣:“將所有非靜態(tài)文件全部指向 index.php”。
然后,將某一個端口用 Apache 或 Nginx 分配給 MFFC/public 目錄,這一步十分建議用 Apache 或者 Nginx 做。
如果使用 PHP 內(nèi)置 HTTP 服務(wù)器:cd public && php -S 127.0.0.1:3000將導(dǎo)致路由的 Macaw::get("fuck" 必須寫成 Macaw::get("/fuck" 才能響應(yīng)。
目前的代碼使用 Apache + mod_php 和 Nginx + php-fpm 方式均沒有問題。
我在本地綁定了 81 端口,訪問 http://127.0.0.1:81/fuck 可以看到:
如果頁面亂碼,請調(diào)整編碼為 UTF-8。如果你成功看到以上頁面,那么恭喜你,路由配置成功!
Macaw 只有一個文件,去除空行總共也就一百行多一點,通過代碼我們能直接看明白它是怎么工作的。下面我簡略分析一下:
Composer 的自動加載在每次 URL 驅(qū)動 MFFC/public/index.php 之后會在內(nèi)存中維護(hù)一個全量命名空間類名到文件名的數(shù)組,這樣當(dāng)我們在代碼中使用某個類的時候,將自動載入該類所在的文件。
我們在路由文件中載入了 Macaw 類:use NoahBuscherMacawMacaw;,接著調(diào)用了兩次靜態(tài)方法 ::get(),這個方法是不存在的,將由 MFFC/vendor/codingbean/macaw/Macaw.php 中的 __callstatic() 接管。
這個函數(shù)接受兩個參數(shù),$method 和 $params,前者是具體的 function 名稱,在這里就是 get,后者是這次調(diào)用傳遞的參數(shù),即 Macaw::get("fuck",function(){...}) 中的兩個參數(shù)。第一個參數(shù)是我們想要監(jiān)聽的 URL 值,第二個參數(shù)是一個 PHP 閉包,作為回調(diào),代表 URL 匹配成功后我們想要做的事情。
__callstatic() 做的事情也很簡單,分別將目標(biāo)URL(即 /fuck)、HTTP方法(即 GET)和回調(diào)代碼壓入 $routes、$methods 和 $callbacks 三個 Macaw 類的靜態(tài)成員變量(數(shù)組)中。
路由文件最后一行的 Macaw::dispatch(); 方法才是真正處理當(dāng)前 URL 的地方。能直接匹配到的會直接調(diào)用回調(diào),不能直接匹配到的將利用正則進(jìn)行匹配。
下一步:利用 Composer 一步一步構(gòu)建自己的 PHP 框架(三)——設(shè)計 MVC
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/31879.html
摘要:原文發(fā)表在我的個人網(wǎng)站利用一步一步構(gòu)建自己的框架一基礎(chǔ)準(zhǔn)備一統(tǒng)天下的時代已經(jīng)到來白巖松一個時代結(jié)束了另一個時代開始了??蚣芸苫ビ眯孕〗M,簡稱,成立于年。 原文發(fā)表在我的個人網(wǎng)站 利用 Composer 一步一步構(gòu)建自己的 PHP 框架(一)——基礎(chǔ)準(zhǔn)備 『Composer 一統(tǒng)天下的時代已經(jīng)到來!』 ——白巖松 一個時代結(jié)束了,另一個時代開始了。 Framework ...
摘要:引入了命名空間,這是規(guī)劃在中的功能,所以在一定程度上其實就是,的下一個版本是,即將發(fā)布,主要貢獻(xiàn)者是大名鼎鼎的鳥哥。使用修改為自動載入路由配置新增注意替換數(shù)據(jù)庫密碼修改無需改動。作者接受采訪時曾表示,是整個中最難實現(xiàn)的部分。 原文發(fā)表在我的個人網(wǎng)站:利用 Composer 一步一步構(gòu)建自己的 PHP 框架(四)——使用 ORM 本教程示例代碼見 https://github.com...
摘要:所以接下來我們要做的事情就是讓框架更加規(guī)范,更加豐滿。正式開始規(guī)劃文件夾新建文件夾,在中創(chuàng)建三個文件夾,開始正式開始踏上的征程。調(diào)用視圖修改為將包含查詢結(jié)果的數(shù)組返回。下一步利用一步一步構(gòu)建自己的框架四使用 終于可以 一次編寫,到處發(fā)布 了,淚流滿面! 今天凌晨我從一點多開始搞了四個小時到 5:20,終于搞出了個 Emlog 的 MarkDown 插件!歡迎 Emloger ...
摘要:我們先從目前用著最不爽的地方視圖裝載下手。實現(xiàn)裝載器完成基礎(chǔ)準(zhǔn)備以后我們正式開始制造視圖裝載器。下一步利用完善自己的框架二發(fā)送郵件 原文發(fā)表在我的個人網(wǎng)站:利用 Composer 完善自己的 PHP 框架(一)——視圖裝載 本教程示例代碼見 https://github.com/johnlui/My-First-Framework-based-on-Composer 回顧 經(jīng)...
摘要:所以,是幫助您創(chuàng)建您的項目的測試框架,單元測試。行為驅(qū)動開發(fā)是一個來自測試驅(qū)動開發(fā)的開發(fā)過程。這種語言被稱為,是用來描述被測試的預(yù)期的行為。代碼將被測試并且沒有異常。這些標(biāo)準(zhǔn)提出了現(xiàn)代編碼風(fēng)格。 本文來自medium----原文鏈接; 歡迎作客我們的php&Laravel學(xué)習(xí)群:109256050 你需要開始使用測試 這是我每天對自己說的話。像很多人一樣,我不會像TDD所建議的那樣測試...
閱讀 1817·2021-11-22 09:34
閱讀 3102·2019-08-30 15:55
閱讀 681·2019-08-30 15:53
閱讀 2069·2019-08-30 15:52
閱讀 3010·2019-08-29 18:32
閱讀 2004·2019-08-29 17:15
閱讀 2410·2019-08-29 13:14
閱讀 3567·2019-08-28 18:05