首頁  >  文章  >  後端開發  >  基於php7實作的Beauty Framework框架(附程式碼)

基於php7實作的Beauty Framework框架(附程式碼)

不言
不言原創
2018-08-01 13:39:191897瀏覽

這篇文章要跟大家介紹的內容是關於基於php7實現的Beauty Framework框架(附程式碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助

框架的核心連結是從開始的請求路由解析到控制器的分發,model的資料互動到回應。
使用其他的框架實作會非常的笨重,整合的內容太多,很多都不需要用到,所以藉用其他框架寫了一個簡單實用的框架。

先從路由開始來說:
1)路由
路由協定的規則是使用了正規表達的匹配,將不同的連結分發到不同的控制器上去,也支援呼叫匿名函數

// 第一种,使用匿名函数
App::router()->get('/', function () {
    echo "Beauty Framework.";
});
// 第二种,使用url分发到控制器
App::router()->post('/user/info/[0-9]+(/[0-9]+)?', 'App\Controllers\UserController@getUserInfo');

其中實作的核心程式碼:(是不是很簡單)

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)控制器
沒有的,你指向的哪裡,就可以在哪裡進行請求處理,但是按照MVC,建議寫到Controller裡,大家都是這麼認為的,就這麼做;

3)模型層
這裡直接整合了Dao類,用於資料庫查詢操作,因為現在很多都在使用MySQL,就耦合地實現了MySQL的常規操作,因為資料庫的原生操作會引起很多的注入等問題,沒有支援直接Qquery的方式來做。

4)DAO層
因為很多情況下都要進行讀寫分離,但是要使用MySQL Proxy來實現,有太過笨重,所以實現了支援資料庫query根據不同的sql分別使用master和slave資料庫。
怎麼做的?

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

看看Select怎麼做的,這部分是實現邏輯:

    /**
     * 获取查询内容,以数组形式返回,数据内为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)配置類別
#在開發環境和生產環境會使用不同的配置環境,在框架中可以建立.env環境來切換。在config中可以常規地設定development和production,使用哪個環境就在.env設定哪個

; This is a environment configuration file
environment=development

當然也有一些公共的設定訊息,可以在config檔裡直接設置,這樣就可以在哪個環境都可以使用。

// 支持使用.连接访问配置项,访问的是config/app.php中的config key
\Beauty\Core\App::config()->get("app.config");

6)請求回應
因為不需要View,只需要傳回json數據,所以在Header直接寫死了text/json。 = =

其他實作了

  • memcache和redis採用一致性雜湊存取不同的實例。

  • validator驗證類別

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

#相關文章推薦:

Zend Framework框架Smarty擴充實作方法,zendsmarty

Zend Framework框架路由機製程式碼分析,zendframework
#

以上是基於php7實作的Beauty Framework框架(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn