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

資訊專欄INFORMATION COLUMN

API后端框架Godtail2-路由組件

summerpxy / 864人閱讀

摘要:另外這個框架作為后端純框架。當前博客就是用這個組件寫的,代碼也在上。還需完善的一些地方近幾天抽空解決下自定義路由添加正則匹配。的格式換行數(shù)據(jù)內(nèi)容換行數(shù)據(jù)內(nèi)容最后一個目前是通過正則來解析處理的,如果設(shè)置了。使用生成臨時文件。

來自博客:神的尾巴,原文鏈接

已提交到github,路由組件代碼,代碼質(zhì)量一般,大家將就著看 : )

組件思路

現(xiàn)在都是單入口,通過index.php配置組件,然后通過組件dispatch,來調(diào)用指定的控制器。

另外這個框架作為后端純Api框架。沒有PHP模板引擎,所有與前端的數(shù)據(jù)交互都通過json(推薦)或xml。所以要支持跨域,也要支持RESTFul風(fēng)格的請求。

當前實現(xiàn)了的一些特性

自動調(diào)用控制器,處理請求。

專門解析參數(shù)的Param工具類。

PHP不處理PUT請求過來的參數(shù),添加Parser工具類,有解析器FormData,Json,用來處理前端發(fā)過來的數(shù)據(jù)。包含上傳文件的解析(設(shè)置到臨時文件,對于比較小的文件直接獲取文件內(nèi)容,可以自己配置)。

當前博客就是用這個組件寫的,代碼也在github上。

還需完善的一些地方(近幾天抽空解決下)

自定義路由:添加正則匹配。

例如`/article/:id`,自動配置整數(shù),并設(shè)置到參數(shù)id。
[
    "url" => "/article/:id",
    "filter" => [
        "id" => "/d+/"
     ]
     #"controller" => "Article@detail"
     "real" => "/article/detail/:id"
]

實現(xiàn)過程

composer.json配置

{
    "name": "godtail/router",
    "description": "Easy router, no config, support RESTFul.",
    "license": "MIT",
    "require": {
        "php": ">=5.3.3"
    },
    "autoload": {
        "psr-4": {"GodtailRouter": "./src"}
    }
}
需要的配置
"deep" => 2, #控制器層數(shù) 
"default" => ["Index", "index"], #默認,自動補全
"namespacePre" => "Service", #控制器命名空間前綴
"classSuffix" => "Service", #控制器類名后綴
"crossDomain" => [ #跨域設(shè)置
    "allowOrigin" => "http://test.net",
    "maxAge" => "86400",
    "headers" => "Content-Type",
    "methods" => "OPTIONS, GET, PUT, POST, DELETE",
]
如何獲得比較好的URL風(fēng)格

通過nginx rewrite,把匹配不到的url,rewriteindex.php?/$uri

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

這樣godtail.cn/index.php?/article/tag,就可以寫成godtail.cn/article/tag

路由分層和URL參數(shù)解析

config的deep參數(shù),用來配置路由多少層,如果功能比較簡單可以只分為2層,如果分module,則可以分成3層。

獲取URL,根據(jù)/拆分。
例如`deep=2`, `godtail.cn/article/tag/page/2`,把page設(shè)置到Params。

Params: 保存著一個靜態(tài)變量$data,用來存放請求過來的參數(shù)。
提供get,set,parse方法。
FormData的解析

如果通過POST過來的請求,PHP能夠處理,設(shè)置到$_POST或者$_FILES,但是如果是PUT請求,則需要自己處理php://input數(shù)據(jù)流。

FormData的格式

------boundary--------["--"+boundary]
name=1
content-type=xxxx
[換行]
數(shù)據(jù)內(nèi)容1
------boundary--------["--"+boundary]
name=2
content-type=xxxx
[換行]
數(shù)據(jù)內(nèi)容2
------boundary---------[最后一個"--"+boundary+"-"]

目前是通過正則來解析處理的,如果設(shè)置了saveFile。使用tempnam生成臨時文件。

啟用
#設(shè)置配置
Router::config($config["router"]);

#dispatch
Router::dispatch();

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

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

相關(guān)文章

  • EggBorn.js:一款頂級Javascript全棧開發(fā)框架

    摘要:是什么是一款頂級全棧開發(fā)框架。漸進式開發(fā)由于模塊的高度內(nèi)聚,可以將業(yè)務(wù)以模塊的形式沉淀,在多個項目中重復(fù)使用,既可貢獻到開源社區(qū),也可部署到公司內(nèi)部私有倉庫。模塊發(fā)布當項目中的模塊代碼穩(wěn)定后,可以將模塊公開發(fā)布,貢獻到開源社區(qū)。 EggBorn.js是什么 EggBorn.js是一款頂級Javascript全棧開發(fā)框架。 EggBorn.js是采用Javascript進行全棧開發(fā)的最佳...

    dayday_up 評論0 收藏0
  • 構(gòu)建前端項目

    摘要:解決思路服務(wù)器端渲染服務(wù)器端和前端公用同一個應(yīng)用,然后通過構(gòu)建工具及配置,確定哪些組件需要再服務(wù)器端渲染,那些組件需要再客戶端渲染。服務(wù)器端渲染,由框架與構(gòu)建工具配合,并依據(jù)一定的項目結(jié)構(gòu)和編碼方式,共同運行。 分離 為什么需要 前后端分離、web服務(wù)器與static服務(wù)器分離: 前端與后端耦合 (需求) 自動化、工程化的構(gòu)建前端的代碼 (基礎(chǔ)條件) 模塊化、組件化,項目共享代碼 (...

    mindwind 評論0 收藏0
  • SPA那點事

    摘要:單頁面應(yīng)用的出現(xiàn)依然存在著爭議性,我們該如何看待他的兩面性呢接下來小生給大家總結(jié)一下他的優(yōu)缺點。單頁面應(yīng)用的優(yōu)勢無刷新體驗沒有了令人詬病的頁面頻繁刷新,同時節(jié)約瀏覽器資源,路由響應(yīng)比較及時,提升了用戶的體驗。 前端猿一天不學(xué)習(xí)就沒飯吃了,后端猿三天不學(xué)習(xí)仍舊有白米飯擺于桌前。IT行業(yè)的快速發(fā)展一直在推動著前端技術(shù)棧在不斷地更新?lián)Q代,前端的發(fā)展成了互聯(lián)網(wǎng)時代的一個縮影。而單頁面應(yīng)用的發(fā)展...

    PumpkinDylan 評論0 收藏0
  • SPA那點事

    摘要:單頁面應(yīng)用的出現(xiàn)依然存在著爭議性,我們該如何看待他的兩面性呢接下來小生給大家總結(jié)一下他的優(yōu)缺點。單頁面應(yīng)用的優(yōu)勢無刷新體驗沒有了令人詬病的頁面頻繁刷新,同時節(jié)約瀏覽器資源,路由響應(yīng)比較及時,提升了用戶的體驗。 前端猿一天不學(xué)習(xí)就沒飯吃了,后端猿三天不學(xué)習(xí)仍舊有白米飯擺于桌前。IT行業(yè)的快速發(fā)展一直在推動著前端技術(shù)棧在不斷地更新?lián)Q代,前端的發(fā)展成了互聯(lián)網(wǎng)時代的一個縮影。而單頁面應(yīng)用的發(fā)展...

    Lsnsh 評論0 收藏0

發(fā)表評論

0條評論

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