V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
doyouhaobaby
V2EX  ›  PHP

QueryPHP V1-alpha.3 完善权限,支持 Swoole 4 和 RoadRunner

  •  
  •   doyouhaobaby · 2019-03-13 01:48:54 +08:00 · 3217 次点击
    这是一个创建于 2088 天前的主题,其中的信息可能已经有所发展或是发生改变。

    经过 3 个月的开发,QueryPHP v1.0.0-alpha.3 版本可以发布了,这也是 alpha 最后一个版本。

    关于 QueryPHP

    QueryPHP 是一款现代化的高性能 PHP 7 常驻框架,以工程师用户体验为历史使命,让每一个 PHP 应用都有一个好框架。

    百分之百单元测试覆盖直面 Bug 一剑封喉,基于 Zephir 实现框架常驻,依托 Swoole 生态实现业务常驻,此刻未来逐步渐进。 我们的愿景是 USE LEEVEL WITH SWOOLE DO BETTER, 让您的业务撑起更多的用户服务。

    特性

    框架理念 (值得托付的使命感,让每一个 PHP 应用都有一个好框架。)

    组件系统 (框架底层由独立的高内聚低耦合组件构成,可以轻松无侵入接入现有系统。)

    路由系统 (框架提供 MVC 自动路由并能够智能解析 Restful 请求和基于 OpenApi 3.0 规范的 swagger-php 注解路由,文档路由一步搞定。)

    整体解决方案 (框架提供了从缓存、Session、IOC 容器、模板引擎、Ddd ORM 等大量开箱即用的功能,提供了基于 Symfony Console 命令行工具集。)

    框架常驻 (Leevel 可选扩展接管底层核心)

    业务常驻 (基于 Swoole 4 开发,我们的愿景是少量代码或者无修改,让你的业务撑起更多的用户服务。)

    百分之百单元测试覆盖(单元测试一直是国产 PHP 开源项目的痛)

    拜师国外现代化框架 (从 Laravel、Symfony 吸收大量特性,也包含其它的框架.)

    PHP 7 严格模式 (每一个 PHP 脚本都是 strict_types = 1 )

    PHP 7 类型提示 (尽可能为每一个方法提供确定的参数类型和返回值类型)

    依赖注入 (完整实现,关键 mvc、命令行脚本、事件监听器全部接入 IOC )

    领域驱动设计 (在妖怪的 QeePHP 基础上保持创新,提供了 UnitOfWork[事务工作单元]、Repository[仓储]、Specification[查询规约],Entity getter setter[领域实体或叫模型] )

    more...

    更新日志

    距离上一个版本有 3 个月了,这个我们的 hunzhiwange/framework 已有 183 条跟新日志,hunzhiwange/queryphp 已有 82 条日志,这个版本主要完善 IViewUI 开发的通用权限系统,支持常用常驻方案 Swoole 4 和 RoadRunner,以及文档如何写的问题。

    https://github.com/hunzhiwange/framework/releases https://github.com/hunzhiwange/queryphp/releases

    完善权限系统

    这个更新主要是完善上一个权限系统,基于资源的权限系统,整个权限系统已经全部接入完毕。

    可以基于这个开发后台产品,例如我们用于生产的小工具:

    框架底层的核心 API 已基本稳定,一直在做一些代码层面的优化。

    初步支持 Swoole 4 和 RoadRunner 常驻方案

    除了对用户体验的特别注重之外,QueryPHP 自身的性能考虑尽可能的提升。目前基本加入 Swoole 4,还需要完善,计划在 beta 2 版本开始工作。例外还支持 RoadRunner 的常驻方案,目前感觉比较满意这个,基于 PHP CLI 坑少。 下一步需要支持 php-pm 这个常驻方法,观察一哈。

    Swoole Http server

    php leevel http:server # php leevel http:server -d
    php leevel http:reload
    php leevel http:stop
    php leevel http:status
    

    Swoole Websocket server

    hp leevel websocket:server # php leevel websocket:server -d
    php leevel websocket:reload
    php leevel websocket:stop
    php leevel websocket:status
    

    RoadRunner

    RoadRunner 是一个开源的高性能 PHP 应用服务器、负载均衡器和流程管理器。它支持作为一个服务运行,能够在每个项目的基础上扩展其功能。

    /data/server/roadrunner-1.3.5-darwin-amd64/rr serve -d -v # -d = debug
    /data/server/roadrunner-1.3.5-darwin-amd64/rr http:reset
    /data/server/roadrunner-1.3.5-darwin-amd64/rr http:workers -i
    

    更多详情见

    https://github.com/hunzhiwange/queryphp/blob/master/README-zh-CN.md

    文档支持

    基于单元测试即文档的理念,开发了一个专门基于单元测试加注解的方式来自动化用户文档。

    cd /data/codes/queryphp
    php leevel make:doc tests /data/codes/queryphp/vendor/hunzhiwange/framework/tests /data/codes/queryphp.com/docs/docs
    

    根据目前的效果来说,非常不错,这样加速 QueryPHP 文档编写工作,beta.1 版本开始编写主要文档。

    <?php
    
    declare(strict_types=1);
    
    namespace Tests\View\Compiler;
    
    use Tests\TestCase;
    
    /**
     * compiler var test.
     *
     * @author Xiangmin Liu <[email protected]>
     *
     * @since 2018.06.06
     *
     * @version 1.0
     *
     * @api(
     *     title="变量",
     *     path="template/var",
     *     description="变量是最基本的用法,这里模板引擎做了大量的工作支持更好。",
     * )
     */
    class CompilerVarTest extends TestCase
    {
        use Compiler;
    
        /**
         * @api(
         *     title="最简单一个普通变量",
         *     description="",
         *     note="模板标签的 “{” 和 “$” 之间不能有任何的空格,否则标签无效。",
         * )
         */
        public function testBaseUse()
        {
            $parser = $this->createParser();
    
            // 普通变量
            $source = <<<'eot'
    {$name}
    eot;
    
            $compiled = <<<'eot'
    <?php echo $name; ?>
    eot;
    
            $this->assertSame($compiled, $parser->doCompile($source, null, true));
        }
    
        /**
         * @api(
         *     title="JS 风格变量",
         *     description="",
         *     note="注意:“{{“ 与内容之间可以有空格,也可以没有,结果一样。",
         * )
         */
        public function testJsStyle()
        {
            $parser = $this->createParser();
    
            // JS 风格变量
            $source = <<<'eot'
    {{ value }}
    eot;
    
            $compiled = <<<'eot'
    <?php echo $value; ?>
    eot;
    
            $this->assertSame($compiled, $parser->doCompile($source, null, true));
        }
    
        /**
         * @api(
         *     title="输出一个数组",
         *     description="",
         *     note="",
         * )
         */
        public function testArraySupport()
        {
            $parser = $this->createParser();
    
            // 数组支持
            $source = <<<'eot'
    我的梦想是写好”{$value['name']}“,我相信”{$value['description']}“。
    eot;
    
            $compiled = <<<'eot'
    我的梦想是写好”<?php echo $value['name']; ?>“,我相信”<?php echo $value['description']; ?>“。
    eot;
    
            $this->assertSame($compiled, $parser->doCompile($source, null, true));
        }
        
        ...
    }
    
    

    开发计划

    • PHP 5 时代 - 代码功能堆砌阶段 2010.08.03 - 2014.10.11 (原名 The DoYouHaoBaby PHP Framework )
    • PHP 7 时代 - 基础功能重构完善 2016.11 - 2018.01
    • PHP 7 时代 - 百分之百单元测试覆盖,代码准确性和可维护性,即工程化阶段 2018.01 - 2019.03
    • PHP 7 时代 - 准生产级别 1.0 正式版,文档完善以及常用常驻方案支持完善 Swoole 4, RoadRunner, php-pm 以及自研扩展框架 Leevel 2019-03 - 2019.12
    • PHP 7 时代 - 面向生产级别的框架,1.1 LTS,2019.12 - 2020.06

    感谢关注

    2010-present Xiangmin Liu

    5 条回复    2019-03-24 16:54:10 +08:00
    p23XnFNH1Wq953rV
        1
    p23XnFNH1Wq953rV  
       2019-03-13 08:54:46 +08:00 via iPhone   ❤️ 1
    鼓掌,支持一下
    masker
        2
    masker  
       2019-03-13 09:23:04 +08:00 via Android   ❤️ 1
    🤣框架那么多,还是用主流的就好
    doyouhaobaby
        3
    doyouhaobaby  
    OP
       2019-03-13 11:52:18 +08:00
    @masker 主要先自用,有强大的掌握能力的可以小部分把玩,慢工优化。
    gouchaoer
        4
    gouchaoer  
       2019-03-13 13:01:13 +08:00 via Android
    厉害,
    basstk
        5
    basstk  
       2019-03-24 16:54:10 +08:00
    不错,关注
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2739 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 15:20 · PVG 23:20 · LAX 07:20 · JFK 10:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.