基於php7實現的Beauty Framework架構(附代碼)

來源:互聯網
上載者:User
這篇文章給大家介紹的內容是關於基於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 fileenvironment=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
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.