资讯专栏INFORMATION COLUMN

php7的超简单框架Beauty Framework

pubdreamcc / 2512人阅读

摘要:使用其他的框架实现会非常的笨重,集成的内容太多,很多都不需要用到,所以借鉴其他框架写了一个简单实用的框架。配置类在开发环境和生产环境会使用不同的配置环境,在框架中可以创建环境来切换。其他实现了和采用一致性哈希访问不同的实例。

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

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

// 第一种,使用匿名函数
App::router()->get("/", function () {
    echo "Beauty Framework.";
});
// 第二种,使用url分发到控制器
App::router()->post("/user/info/[0-9]+(/[0-9]+)?", "AppControllersUserController@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
BeautyCoreApp::config()->get("app.config");

6)请求响应
因为不需要View,只需要返回json数据,所以在Header直接写死了text/json。 = =

其他实现了

memcache和redis采用一致性哈希访问不同的实例。

validator验证类

具体代码都在github上 https://github.com/tigerk/Beauty

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/29140.html

相关文章

  • [译] Laravel 5 之美 - 单元测试

    摘要:事实上,这是讨论测试的惟一一章。因此,在中没有单一的测试方法。包含了这是的标准强调业务或特性测试是最流行的框架。然后我们在这个项目中使用进行单元测试。在随后的章节中,将不再进行测试。 原文地址: Laravel 5.1 Beauty - Testing Note 本系列第四节内容. 本章会创建一个以后可以用到的项目便于以后我们的课程使用, 同时也会查课各种测试选项. 以后一段时间内会开...

    fuyi501 评论0 收藏0
  • 100天涨薪4k!从功能测试到自动化测试,我整理的超全学习指南!

    摘要:事实上,自动化测试是相对于手动的。减少人为的错误自动化测试是机器完成,不存在执行过程中人为的疏忽和错误,测试设计完全决定了测试的质量,可以降低减少人为造成的错误。而接口自动化测试,主要是对接口进行测试。 今年6月份,由于经济压力让我下定决心进阶自动化测试,已经24的我做了3年功能测试,坐标广...

    TwIStOy 评论0 收藏0
  • 从未这么明白的设计模式(二):观察者模式

    摘要:小丽总是会在朋友圈发布自己的各种生活状态。总结我们从观察者模式特点入手,通过一个案例,一步一步完善了观察着的写法,特点组后介绍了总已有的实现关注我,这里只有干货同系列文章从未这么明白的设计模式一单例模式 showImg(https://segmentfault.com/img/remote/1460000018874501); 本文原创地址,我的博客:https://jsbintask...

    dockerclub 评论0 收藏0
  • 利用 Composer 一步一步构建自己的 PHP 框架(四)——使用 ORM

    摘要:引入了命名空间,这是规划在中的功能,所以在一定程度上其实就是,的下一个版本是,即将发布,主要贡献者是大名鼎鼎的鸟哥。使用修改为自动载入路由配置新增注意替换数据库密码修改无需改动。作者接受采访时曾表示,是整个中最难实现的部分。 原文发表在我的个人网站:利用 Composer 一步一步构建自己的 PHP 框架(四)——使用 ORM 本教程示例代码见 https://github.com...

    FreeZinG 评论0 收藏0
  • 轻量级高性能PHP框架ycroute

    摘要:数据交互层可选如果你习惯了层结构,你可以加载层,作为与数据库交互的层,而层作为业务层。 YCRoute github: https://github.com/caohao-php... 目录 框架介绍 运行环境 代码结构 路由配置 过滤验签 控制层 加载器 模型层 数据交互dao层(可选) Redis缓存操作 数据库操作 配置加载 公共类加载 公共函数 日志模块 视图层 RPC 介绍...

    dailybird 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<