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

資訊專欄INFORMATION COLUMN

php7的超簡(jiǎn)單框架Beauty Framework

pubdreamcc / 2589人閱讀

摘要:使用其他的框架實(shí)現(xiàn)會(huì)非常的笨重,集成的內(nèi)容太多,很多都不需要用到,所以借鑒其他框架寫了一個(gè)簡(jiǎn)單實(shí)用的框架。配置類在開(kāi)發(fā)環(huán)境和生產(chǎn)環(huán)境會(huì)使用不同的配置環(huán)境,在框架中可以創(chuàng)建環(huán)境來(lái)切換。其他實(shí)現(xiàn)了和采用一致性哈希訪問(wèn)不同的實(shí)例。

框架的核心鏈路是從開(kāi)始的請(qǐng)求路由解析到控制器的分發(fā),model的數(shù)據(jù)交互到響應(yīng)。
使用其他的框架實(shí)現(xiàn)會(huì)非常的笨重,集成的內(nèi)容太多,很多都不需要用到,所以借鑒其他框架寫了一個(gè)簡(jiǎn)單實(shí)用的框架。

先從路由開(kāi)始來(lái)說(shuō):
1)路由
路由協(xié)議的規(guī)則是使用了正則表達(dá)的匹配,將不同的鏈接分發(fā)到不同的控制器上去,也支持調(diào)用匿名函數(shù)

// 第一種,使用匿名函數(shù)
App::router()->get("/", function () {
    echo "Beauty Framework.";
});
// 第二種,使用url分發(fā)到控制器
App::router()->post("/user/info/[0-9]+(/[0-9]+)?", "AppControllersUserController@getUserInfo");

其中實(shí)現(xiàn)的核心代碼:(是不是很簡(jiǎn)單)

if (is_string($lostrcallable) && preg_match("!^([a-zA-Z0-9]+)@([a-zA-Z0-9]+)$!", $lostrcallable, $matches)) {
            $class  = $matches[1];
            $method = $matches[2];

            $callable = function () use ($class, $method) {
                static $obj = null;
                if ($obj === null) {

                    $obj = new $class;
                }

                return call_user_func_array(array($obj, $method), func_get_args());
            };
        }

2)控制器
沒(méi)有的,你指向的哪里,就可以在哪里進(jìn)行請(qǐng)求處理,但是按照MVC,建議寫到Controller里,大家都是這么認(rèn)為的,就這么做;

3)模型層
這里直接集成了Dao類,用于數(shù)據(jù)庫(kù)查詢操作,因?yàn)楝F(xiàn)在很多都在使用MySQL,就耦合地實(shí)現(xiàn)了MySQL的常規(guī)操作,因?yàn)閿?shù)據(jù)庫(kù)的原生操作會(huì)引起很多的注入等問(wèn)題,沒(méi)有支持直接Qquery的方式來(lái)做。

4)DAO層
因?yàn)楹芏嗲闆r下都要進(jìn)行讀寫分離,但是要使用MySQL Proxy來(lái)實(shí)現(xiàn),有太過(guò)笨重,所以實(shí)現(xiàn)了支持?jǐn)?shù)據(jù)庫(kù)query根據(jù)不同的sql分別使用master和slave數(shù)據(jù)庫(kù)。
怎么做的?

就是根據(jù)不用的查詢操作直接劃分,Select查詢操作直接分到讀庫(kù),Insert、Update、Delete直接分到寫庫(kù)。也可以直接使用onMasterConnection/onSlaveConnection直接指定.

看看Select怎么做的,這部分是實(shí)現(xiàn)邏輯:

    /**
     * 獲取查詢內(nèi)容,以數(shù)組形式返回,數(shù)據(jù)內(nèi)為array。
     *
     * @access public
     * @param integer|array $limit Array to define SQL limit in format Array ($count, $offset)
     *                             or only $count
     *
     * @return mixed Array of Clients
     */
    protected function get($limit = null)
    {
        $this->dbClient->setQueryChannel($this->channel);

        $results = $this->dbClient->arrayBuilder()->get($this->dbTable, $limit, $this->fields);
        $this->_reset();

        if ($this->dbClient->count == 0) {
            return [];
        }

        return $results;
    }

5)配置類
在開(kāi)發(fā)環(huán)境和生產(chǎn)環(huán)境會(huì)使用不同的配置環(huán)境,在框架中可以創(chuàng)建.env環(huán)境來(lái)切換。在config中可以常規(guī)設(shè)置development和production,使用哪個(gè)環(huán)境就在.env設(shè)置哪個(gè)

; This is a environment configuration file
environment=development

當(dāng)然也有一些公共的配置信息,可以在config文件里直接設(shè)置,這樣就可以在哪個(gè)環(huán)境都可以使用。

// 支持使用.連接訪問(wèn)配置項(xiàng),訪問(wèn)的是config/app.php中的config key
BeautyCoreApp::config()->get("app.config");

6)請(qǐng)求響應(yīng)
因?yàn)椴恍枰猇iew,只需要返回json數(shù)據(jù),所以在Header直接寫死了text/json。 = =

其他實(shí)現(xiàn)了

memcache和redis采用一致性哈希訪問(wèn)不同的實(shí)例。

validator驗(yàn)證類

具體代碼都在github上 https://github.com/tigerk/Beauty

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

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

相關(guān)文章

  • [譯] Laravel 5 之美 - 單元測(cè)試

    摘要:事實(shí)上,這是討論測(cè)試的惟一一章。因此,在中沒(méi)有單一的測(cè)試方法。包含了這是的標(biāo)準(zhǔn)強(qiáng)調(diào)業(yè)務(wù)或特性測(cè)試是最流行的框架。然后我們?cè)谶@個(gè)項(xiàng)目中使用進(jìn)行單元測(cè)試。在隨后的章節(jié)中,將不再進(jìn)行測(cè)試。 原文地址: Laravel 5.1 Beauty - Testing Note 本系列第四節(jié)內(nèi)容. 本章會(huì)創(chuàng)建一個(gè)以后可以用到的項(xiàng)目便于以后我們的課程使用, 同時(shí)也會(huì)查課各種測(cè)試選項(xiàng). 以后一段時(shí)間內(nèi)會(huì)開(kāi)...

    fuyi501 評(píng)論0 收藏0
  • 100天漲薪4k!從功能測(cè)試到自動(dòng)化測(cè)試,我整理的超全學(xué)習(xí)指南!

    摘要:事實(shí)上,自動(dòng)化測(cè)試是相對(duì)于手動(dòng)的。減少人為的錯(cuò)誤自動(dòng)化測(cè)試是機(jī)器完成,不存在執(zhí)行過(guò)程中人為的疏忽和錯(cuò)誤,測(cè)試設(shè)計(jì)完全決定了測(cè)試的質(zhì)量,可以降低減少人為造成的錯(cuò)誤。而接口自動(dòng)化測(cè)試,主要是對(duì)接口進(jìn)行測(cè)試。 今年6月份,由于經(jīng)濟(jì)壓力讓我下定決心進(jìn)階自動(dòng)化測(cè)試,已經(jīng)24的我做了3年功能測(cè)試,坐標(biāo)廣...

    TwIStOy 評(píng)論0 收藏0
  • 從未這么明白的設(shè)計(jì)模式(二):觀察者模式

    摘要:小麗總是會(huì)在朋友圈發(fā)布自己的各種生活狀態(tài)??偨Y(jié)我們從觀察者模式特點(diǎn)入手,通過(guò)一個(gè)案例,一步一步完善了觀察著的寫法,特點(diǎn)組后介紹了總已有的實(shí)現(xiàn)關(guān)注我,這里只有干貨同系列文章從未這么明白的設(shè)計(jì)模式一單例模式 showImg(https://segmentfault.com/img/remote/1460000018874501); 本文原創(chuàng)地址,我的博客:https://jsbintask...

    dockerclub 評(píng)論0 收藏0
  • 利用 Composer 一步一步構(gòu)建自己的 PHP 框架(四)——使用 ORM

    摘要:引入了命名空間,這是規(guī)劃在中的功能,所以在一定程度上其實(shí)就是,的下一個(gè)版本是,即將發(fā)布,主要貢獻(xiàn)者是大名鼎鼎的鳥(niǎo)哥。使用修改為自動(dòng)載入路由配置新增注意替換數(shù)據(jù)庫(kù)密碼修改無(wú)需改動(dòng)。作者接受采訪時(shí)曾表示,是整個(gè)中最難實(shí)現(xiàn)的部分。 原文發(fā)表在我的個(gè)人網(wǎng)站:利用 Composer 一步一步構(gòu)建自己的 PHP 框架(四)——使用 ORM 本教程示例代碼見(jiàn) https://github.com...

    FreeZinG 評(píng)論0 收藏0
  • 輕量級(jí)高性能PHP框架ycroute

    摘要:數(shù)據(jù)交互層可選如果你習(xí)慣了層結(jié)構(gòu),你可以加載層,作為與數(shù)據(jù)庫(kù)交互的層,而層作為業(yè)務(wù)層。 YCRoute github: https://github.com/caohao-php... 目錄 框架介紹 運(yùn)行環(huán)境 代碼結(jié)構(gòu) 路由配置 過(guò)濾驗(yàn)簽 控制層 加載器 模型層 數(shù)據(jù)交互dao層(可選) Redis緩存操作 數(shù)據(jù)庫(kù)操作 配置加載 公共類加載 公共函數(shù) 日志模塊 視圖層 RPC 介紹...

    dailybird 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<