php7的超简单框架Beauty Framework

框架的核心链路是从开始的请求路由解析到控制器的分发,model的数据交互到响应。
使用其余的框架实现会很是的笨重,集成的内容太多,不少都不须要用到,因此借鉴其余框架写了一个简单实用的框架。php

先从路由开始来讲:
1)路由
路由协议的规则是使用了正则表达的匹配,将不一样的连接分发到不一样的控制器上去,也支持调用匿名函数git

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

其中实现的核心代码:(是否是很简单)github

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里,你们都是这么认为的,就这么作;redis

3)模型层
这里直接集成了Dao类,用于数据库查询操做,由于如今不少都在使用MySQL,就耦合地实现了MySQL的常规操做,由于数据库的原生操做会引发不少的注入等问题,没有支持直接Qquery的方式来作。sql

4)DAO层
由于不少状况下都要进行读写分离,可是要使用MySQL Proxy来实现,有太过笨重,因此实现了支持数据库query根据不一样的sql分别使用master和slave数据库。
怎么作的?数据库

就是根据不用的查询操做直接划分,Select查询操做直接分到读库,Insert、Update、Delete直接分到写库。也能够直接使用onMasterConnection/onSlaveConnection直接指定.json

看看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设置哪一个app

; 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

相关文章
相关标签/搜索