來自博客:神的尾巴,原文連接php
已提交到github,路由組件代碼,代碼質量通常,你們將就着看 : )前端
如今都是單入口,經過index.php
配置組件,而後經過組件dispatch
,來調用指定的控制器。nginx
另外這個框架做爲後端純Api
框架。沒有PHP模板引擎
,全部與前端的數據交互都經過json
(推薦)或xml
。因此要支持跨域
,也要支持RESTFul風格
的請求。git
自動調用控制器,處理請求。github
專門解析參數的Param
工具類。json
PHP
不處理PUT
請求過來的參數,添加Parser
工具類,有解析器FormData
,Json
,用來處理前端發過來的數據。包含上傳文件的解析(設置到臨時文件,對於比較小的文件直接獲取文件內容,能夠本身配置)。後端
當前博客就是用這個組件寫的,代碼也在github上。跨域
自定義路由:添加正則匹配。composer
例如`/article/:id`,自動配置整數,並設置到參數id。 [ 'url' => '/article/:id', 'filter' => [ 'id' => '/\d+/' ] #'controller' => 'Article@detail' 'real' => '/article/detail/:id' ]
composer.json
配置框架
{ "name": "godtail/router", "description": "Easy router, no config, support RESTFul.", "license": "MIT", "require": { "php": ">=5.3.3" }, "autoload": { "psr-4": {"Godtail\\Router\\": "./src"} } }
'deep' => 2, #控制器層數 'default' => ['Index', 'index'], #默認,自動補全 'namespacePre' => 'Service\\', #控制器命名空間前綴 'classSuffix' => 'Service', #控制器類名後綴 'crossDomain' => [ #跨域設置 'allowOrigin' => 'http://test.net', 'maxAge' => '86400', 'headers' => 'Content-Type', 'methods' => 'OPTIONS, GET, PUT, POST, DELETE', ]
經過nginx rewrite
,把匹配不到的url
,rewrite
爲index.php?/$uri
。
location / { try_files $uri $uri/ /index.php?/$uri; }
這樣godtail.cn/index.php?/article/tag
,就能夠寫成godtail.cn/article/tag
。
config的deep參數,用來配置路由多少層,若是功能比較簡單能夠只分爲2層,若是分module,則能夠分紅3層。
獲取URL,根據/拆分。 例如`deep=2`, `godtail.cn/article/tag/page/2`,把page設置到Params。 Params: 保存着一個靜態變量$data,用來存放請求過來的參數。 提供get,set,parse方法。
若是經過POST
過來的請求,PHP
可以處理,設置到$_POST
或者$_FILES
,可是若是是PUT請求,則須要本身處理php://input數據流
。
FormData的格式
------boundary--------['--'+boundary] name=1 content-type=xxxx [換行] 數據內容1 ------boundary--------['--'+boundary] name=2 content-type=xxxx [換行] 數據內容2 ------boundary---------[最後一個'--'+boundary+'-']
目前是經過正則來解析處理的,若是設置了saveFile。使用tempnam
生成臨時文件。
#設置配置 Router::config($config['router']); #dispatch Router::dispatch();