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

資訊專欄INFORMATION COLUMN

來!狂擼一款PHP現(xiàn)代化框架 (準備工作)

JellyBool / 913人閱讀

摘要:前期做任何一件事情都要有個前期準備工作。作為的規(guī)定,我們命名空間得有一個祖宗名字,這里我叫他神圣的至少需要一個庫來存儲這個項目創(chuàng)建一個文件用于進行包管理灰常簡單,搞進來。

前言

從本章開始,我們繼續(xù)造輪子,去完成一款類似于Laravel的現(xiàn)代化PHP框架,為什么說是現(xiàn)代化?因為他必須具備一下幾點

遵守PSR-4編碼規(guī)范

使用Composer進行包管理

標準的HTTP請求方式

優(yōu)雅的使用設(shè)計模式

開始我們無需關(guān)心性能問題,先考慮框架具體需要實現(xiàn)哪些功能,這與實現(xiàn)業(yè)務(wù)就大不相同了,來!開始我的表演。

前期

做任何一件事情都要有個前期準備工作。

作為PSR-4的規(guī)定,我們命名空間得有一個祖宗名字,這里我叫他神圣的 《z_framework》

至少需要一個GITHUB庫來存儲這個項目 https://github.com/CrazyCodes...

創(chuàng)建一個composer.json文件用于進行包管理,灰常簡單,phpunit搞進來。通過psr-4加載個項目命名

{
  "name": "z framework",
  "require-dev": {
    "phpunit/phpunit": "^7.0"
  },
  "autoload": {
    "psr-4": {
      "Zero": "src/Zero",
    }
  },
  "autoload-dev": {
    "psr-4": {
      "ZeroTests": "tests/"
    }
  }
}

最后我們就需要考慮下目錄的結(jié)構(gòu)及其我們第一步要完成的功能,核心的結(jié)構(gòu)(這里并非只的項目結(jié)構(gòu)哦。是框架的核心結(jié)構(gòu))暫且是這樣

src

Zero

Config // 可能存放一些配置文件的解析器

Container // 容器的解析器

Http // 請求處理的一些工具

Routes // 路由處理的一些功能

Bootstrap.php // 這可能是一個啟動腳本

Zero.php // 可能是核心的入口文件

tests // 測試目錄

.gitignore

composer.json

LICENSE

README.md

路由

還記得第一次使用Laravel時我們第一步做的事情嗎?是的,去研究路由,所以我們把路由作為框架的第一步。在研究路由前,我們要知道

http://www.domain.com/user/create

是如何實現(xiàn)的,php默認是必須請求index.php或者default.php的,上述鏈接實際隱藏了index.php或default.php ,這是Nginx等服務(wù)代理幫我們做到的優(yōu)雅的鏈接,具體配置如下,實際與Laravel官方提供無差別

server {
  listen       80;
  server_name  www.zf.com;
  root          /mnt/app/z_framework/server/public;
  index         index.php index.html index.htm;

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

  location ~ .php$ {
     fastcgi_pass   php71:9000;
     fastcgi_index  index.php;
     fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
     include        fastcgi_params;
  }
}

通過

try_files $uri $uri/ /index.php?$query_string;

去解析請求,通過上述可以得出

http://www.domain.com/user/create
=======
http://www.domain.com/index.php?user/create

好了,明白了其中奧秘后,我們開始路由的編寫,在src/Routes/Route.php

namespace ZeroRoutes;
    
class Route 
{
}
實現(xiàn)

首先我們先創(chuàng)建一個簡單的接口文件
src/Routes/RouteInterface.php

namespace ZeroRoutes;
    
interface RouteInterface
{
    public function Get($url, $callFile);
    
    public function Post($url, $callFile);
    
    public function Put($url, $callFile);
    
    public function Delete($url, $callFile);
}

從Get請求開始

namespace ZeroRoutes;
    
class Route implements RouteInterface
{
    public function Get($url, $callFile)
    {
    
    }
}

最后實現(xiàn)Get代碼塊

if (parent::isRequestMethod("GET")) { // 判讀請求方式
                
    if (is_callable($callFile)) { // 判斷是否是匿名函數(shù)
        return $callFile();
    }
    
    if ($breakUpString = parent::breakUpString($callFile)) { // 獲取Get解析。既/user/create 
        header("HTTP/1.1 404 Not Found");
    }
    
    try {
        // 通過反射類獲取對象 $breakUpString[0] = user
        $reflectionClass = new ReflectionClass("AppControllers" . $breakUpString[0]);
        // 實例化對象
        $newInstance     = $reflectionClass->newInstance();
        // 獲取對象中的指定方法,$breakUpString[1] = create
        call_user_func([
            $newInstance,
            $breakUpString[1],
        ], []);
    } catch (ReflectionException $e) {
        header("HTTP/1.1 404 Not Found");
    }
} else {
    header("HTTP/1.1 404 Not Found");
}

return "";

如果你想測試上述代碼,可使用phpunit,或者傻大粗的方式,這里便于理解使用傻大粗的方式

創(chuàng)建一個目錄,隨后按照Laravel的目錄形式創(chuàng)建幾個目錄,


最后public/index.php文件中去調(diào)用路由

require_once "../../vendor/autoload.php";

Zeroero::Get("user", "UserController@create");

到這里我們就基本完成了路由的功能,下一章將完善路由的編碼

致謝

感謝你看到這里,希望本篇可以幫到你。具體代碼在 https://github.com/CrazyCodes...

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

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

相關(guān)文章

  • !狂擼一款PHP現(xiàn)代化框架 (路由的設(shè)計)

    摘要:先從開始參照規(guī)定設(shè)定接口方法分別為,當然也是規(guī)范了以上標準請求。查看存儲是否符合預(yù)期。包括測試對路由創(chuàng)建后是否為的實現(xiàn)。具體可查看致謝上述已完成了路由的基本設(shè)計,下一章將講解從啟動到請求路由映射到服務(wù)腳本的過程。 showImg(https://segmentfault.com/img/bVbk35Y?w=800&h=450); 前言 上一篇的標題改了一下,以一、二、三為章節(jié)對讀者來說...

    trilever 評論0 收藏0
  • 看吧,這就是現(xiàn)代化 PHP 該有的樣子

    摘要:這大概是我沒有及早使用,或多數(shù)開發(fā)者流連現(xiàn)狀造成的。它就是,一個的框架。行為驅(qū)動開發(fā)是來自測試驅(qū)動開發(fā)的開發(fā)過程。簡單的說,它就是經(jīng)??赡芤惶鞄状螌⑿K代碼整合進基礎(chǔ)代碼當中的行為。 showImg(https://segmentfault.com/img/remote/1460000013769815); 這是一篇社區(qū)協(xié)同翻譯的文章,已完成翻譯,更多信息請點擊?協(xié)同翻譯介紹?。 文章...

    Tangpj 評論0 收藏0
  • 教你在不使用框架的情況下也能寫出現(xiàn)代化 PHP 代碼

    摘要:畢竟,我們還將在接下來的開發(fā)之旅中使用其他框架開發(fā)者編寫的輔助包。缺乏行業(yè)標準必然意味著,框架中的這些組件高度耦合。如果你嘗試對這個類進行單元測試,會發(fā)現(xiàn)根本不可行。在做單元測試的時候,我們可以很好地模擬數(shù)據(jù)庫連接,并將其傳入使用。 showImg(https://segmentfault.com/img/remote/1460000014180802); 我為你們準備了一個富有挑戰(zhàn)性...

    trigkit4 評論0 收藏0
  • 你不可不知道的20個優(yōu)秀PHP框架

    摘要:每一個開發(fā)者都知道,擁有一個強大的框架可以讓開發(fā)工作變得更加快捷安全和有效。官方網(wǎng)站是一款老牌的框架,現(xiàn)在穩(wěn)定版本已經(jīng)是了。官方網(wǎng)站是由最大的社區(qū)之一的管理開發(fā)的,也是一個開源的框架。 對于Web開發(fā)者來說,PHP是一款非常強大而又受歡迎的編程語言。世界上很多頂級的網(wǎng)站都是基于PHP開發(fā)的。 每一個開發(fā)者都知道,擁有一個強大的框架可以讓開發(fā)工作變得更加快捷、安全和有效。在開發(fā)項目之前選...

    zombieda 評論0 收藏0
  • CodeIgniter 4 建議路線圖

    摘要:核心變化從第一版發(fā)布以來,社區(qū)發(fā)生了巨大變化。這意味著系統(tǒng)必須全部重寫。暫時不會為一個即將停止支持的版本發(fā)布新版本。路由路由功能將被更新。改進的日志系統(tǒng)日志系統(tǒng)將被改進,但具體細節(jié)尚未確定。第一階段第一階段將側(cè)重于抓住框架最重要的部分。 我們綜合考慮了社區(qū)的愿望和意見后,也對什么樣的未來對 CI 是最合適的做了一些思考,然后,CI 理事會對框架的未來做出了一些決策。預(yù)告一下,未來將會有...

    sean 評論0 收藏0

發(fā)表評論

0條評論

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