日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php 框架 路由解析,来!狂撸一款PHP现代化框架 (路由的设计)

發布時間:2024/10/12 php 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php 框架 路由解析,来!狂撸一款PHP现代化框架 (路由的设计) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

上一篇的標題改了一下,以一、二、三為章節對讀者來說是種困擾,現在的標題是依照項目進度來編寫的。上篇文章地址為 https://segmentfault.com/a/11...

這一系列文章并不準備寫太多章節,大概規劃的只有4~5章左右,具體實現代碼還請移步Github

https://github.com/CrazyCodes...

本章詳細講解一下Route(路由的實現),Come on Up Image

上圖大概說明了實現路由要經過兩個步驟

將所有路由信息存儲到超全局變量中

用戶請求時從全局變量中查找路由映射的服務腳本并實例化

OK,大概流程就是醬紫,下面開始“擼”

目錄

路由的代碼暫分為以下幾個文件(這并不是確定的,詳細可查看Github)

文件名

注釋

Route

轉發文件:為實現 Route::get 效果

RouteCollection

路由信息處理存儲

RouteInterface

無需解釋

RouteModel

路由模型,將每個路由信息以結構體方式存儲到$_SERVER

Router

路由的核心類

莫急,我們一個一個文件來看。先從RouteInterface開始

RouteInterface

參照RESTful規定設定接口方法分別為 GET、POST、PATCH、PUT、DELETE、OPTIONS,當然Laravel也是規范了以上標準請求。

interface RouteInterface

{

/**

* @param $uri

* @param null $action

*

* @return mixed

*/

public function get($uri, $action = null);

/**

* @param $uri

* @param null $action

*

* @return mixed

*/

public function post($uri, $action = null);

/**

* @param $uri

* @param null $action

*

* @return mixed

*/

public function patch($uri, $action = null);

/**

* @param $uri

* @param null $action

*

* @return mixed

*/

public function put($uri, $action = null);

/**

* @param $uri

* @param null $action

*

* @return mixed

*/

public function delete($uri, $action = null);

/**

* @param $uri

* @param null $action

*

* @return mixed

*/

public function options($uri, $action = null);

}

Router

先寫一個栗子

public function get($uri, $action = null)

{

return $this->addRoute("GET", $uri, $action);

}

用戶調用下方代碼會指向上述方法,方法既調用addRoute方法將路由信息存儲到$_SERVER中

Route::get('/','Controller')

以下為addRoute部分的代碼

public function addRoute($methods, $uri, $action)

{

// 這里判斷請求方式是否合規,既是否存在 GET、POST、PATCH、PUT、DELETE、OPTIONS其中之一

if ($this->verify($methods) == false) {

return false;

}

// 之后我們去往RouteCollection路由信息的處理類中

return $this->routes->add($uri, $this->createRoute($methods, $action));

}

RouteCollection

最終達到 add 方法,將路由信息存儲到$_SERVER中

public function add($uri, RouteModel $model)

{

if (empty($_SERVER["routes"][$uri])) {

$_SERVER["routes"][$uri] = $model;

}

}

第二個參數RouteModel開始我們說過這是路由模型,將每個路由以結構體的方式存儲到變量中,存儲后的結果

'routes' =>

array(6) {

'test/get' =>

class Zero\Routing\RouteModel#13 (2) {

public $method =>

string(3) "GET"

public $action =>

string(19) "testController@test"

}

'test/post' =>

class Zero\Routing\RouteModel#14 (2) {

public $method =>

string(4) "POST"

public $action =>

string(19) "testController@test"

}

'test/put' =>

class Zero\Routing\RouteModel#15 (2) {

public $method =>

string(3) "PUT"

public $action =>

string(18) "testController@put"

}

'test/del' =>

class Zero\Routing\RouteModel#16 (2) {

public $method =>

string(6) "DELETE"

public $action =>

string(18) "testController@del"

}

'test/patch' =>

class Zero\Routing\RouteModel#17 (2) {

public $method =>

string(5) "PATCH"

public $action =>

string(20) "testController@patch"

}

'test/opt' =>

class Zero\Routing\RouteModel#18 (2) {

public $method =>

string(7) "OPTIONS"

public $action =>

string(18) "testController@opt"

}

}

Route

最后通過__callStatic將代碼重定向到核心類中

public static function __callStatic($name, $arguments)

{

$router = new Router;

return $router->{$name}($arguments[0], $arguments[1]);

}

上述套路部分是Laravel的設計思想,通過這款簡單的框架可對Laravel核心設計有丁點的理解。

測試

測試上次做的有點糙,從本章到系列結束,我們都以PHPunit來測試。

/**

* @content tests all methods storage -> $_SERVER["routes"]

*/

public function testAllMethodsStorage()

{

$this->routes->get($methodGet = "test/get", "testController@test");

$this->assertArrayHasKey($methodGet, $_SERVER[$this->methodsDataKey]);

$this->routes->post($methodPost = "test/post", "testController@test");

$this->assertArrayHasKey($methodPost, $_SERVER[$this->methodsDataKey]);

$this->routes->put($methodPut = "test/put", "testController@put");

$this->assertArrayHasKey($methodPut, $_SERVER[$this->methodsDataKey]);

$this->routes->delete($methodDel = "test/del", "testController@del");

$this->assertArrayHasKey($methodDel, $_SERVER[$this->methodsDataKey]);

$this->routes->patch($methodPatch = "test/patch", "testController@patch");

$this->assertArrayHasKey($methodPatch, $_SERVER[$this->methodsDataKey]);

$this->routes->options($methodOpt = "test/opt", "testController@opt");

$this->assertArrayHasKey($methodOpt, $_SERVER[$this->methodsDataKey]);

}

上述貼出部分代碼,以過程化的方法去測試。查看存儲是否符合預期。

/**

* @content RouteModel Success

*/

public function testCreateRoute()

{

$response = $this->routes->createRoute("GET", "TestController@Get");

$this->assertInstanceOf(RouteModel::class, $response);

}

包括測試對路由創建后是否為RouteModel的實現。具體可查看Github

https://github.com/CrazyCodes...

致謝

上述已完成了路由的基本設計,下一章將講解從啟動到請求路由映射到服務腳本的過程。

希望本章可以幫到你,謝謝。

總結

以上是生活随笔為你收集整理的php 框架 路由解析,来!狂撸一款PHP现代化框架 (路由的设计)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久久二区 | 人人干天天操 | 国产一区二区视频免费在线观看 | 女人扒开腿免费视频app | 成人激情在线视频 | av大片免费在线观看 | 欧美夫妻性生活视频 | 亚洲最新av网站 | 日本一二三区在线 | 色哟哟中文字幕 | 久久精品午夜 | 国产视频999 | 国产日韩欧美在线播放 | 日韩精品一区二区在线 | 强伦轩人妻一区二区电影 | 欧美亚洲日本国产 | 人人澡人人爽 | 一区二区福利电影 | 91视频 - 88av | 一区二区视频免费观看 | 免费在线看黄视频 | 片多多在线观看 | 欧美日韩国产在线观看 | 日本天堂网 | 337p粉嫩色噜噜噜大肥臀 | 欧美黑人性xxx | 亚洲黄片一区 | 国产精品乱码一区二区视频 | 免费在线国产精品 | 91视频日本 | www 在线观看视频 | 国产精品视频一区二区三区, | 91视频免费在线 | 加勒比一区二区三区 | 中文字幕国产日韩 | 亚洲熟女综合一区二区三区 | 成年人观看视频 | 成年人免费在线观看视频网站 | 狠狠躁天天躁夜夜躁婷婷 | 特种兵之深入敌后 | 激情六月色 | 午夜激情网址 | 樱桃视频一区二区三区 | 免费国偷自产拍精品视频 | 四虎黄色影院 | 国产精品8| 欧美第一页浮力影院 | 97国产精品视频人人做人人爱 | 黄色免费网站在线 | 激情综合网五月婷婷 | 亚洲免费观看高清在线观看 | 欧美3p视频| 久久久午夜影院 | 免费观看成年人视频 | 成人亚洲视频 | 快播在线视频 | 日韩精品一二三区 | 最新网址av | 色中色综合 | 精品久久香蕉国产线看观看亚洲 | 中文字幕亚洲视频 | 国产电影一区二区三区爱妃记 | 久久亚洲AV成人无码一二三 | 丰满少妇高潮在线观看 | 成人高潮片免费视频 | 成人777 | 国产第一页精品 | 在线日本视频 | 97国产在线播放 | 女性裸体瑜伽无遮挡 | 欧美一区影院 | 欧美99热 | 中文字幕在线播 | 黄色三级三级 | 国产精品8888 | 欧美视频一二三区 | 台湾少妇xxxx做受 | 蜜桃久久久aaaa成人网一区 | 欧美熟女一区二区 | 韩国午夜影院 | 漂亮人妻被黑人久久精品 | 日韩视频网站在线观看 | 露出调教羞耻91九色 | 亚洲人天堂 | 亚洲第九十九页 | 国产原创在线观看 | 美女网站免费 | 国产福利在线观看 | 国产亚洲精品码 | 美女黄色大片 | 18xxxx日本| 99久久夜色精品国产亚洲 | 日本中文字幕在线 | 性色av免费 | 99色精品 | 大桥未久恸哭の女教师 | 超碰日韩在线 | 毛片免费全部无码播放 | 免费日批网站 |