来源: https://www.oschina.net/news/102591/queryphp-1-0-0-alpha2
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...
更新日志
距离上一个版本有一个月了,这个我们的 hunzhiwange/framework 已有 94 条跟新日志,hunzhiwange/queryphp 已有 150 条日志,这个版本主要支持一个 IViewUI 开发的通用权限系统。
修复模型实体更新 replace 的错误
修复数据库单元测试没有很好的释放连接造成的本地跑单元测试 mysql gone away
更好地支持单元测试
加入断线重连,支持最高 3 次重连
优化仓储查询对分页的友好支持
修正一处集合的 BUG
完善 Leevel\Support\Type 返回值类型
Restful 路由没有参数时为首页 index 而不是 show
删除兼容获取 pathInfo 的获取方法 ?_url=xx,由 Nginx 可以做到
对 axios 等前端提交类型 application/json 时自动处理表单数据
加入一个环境变量 RUNTIME_ENVIRONMENT,利于更好地处理单元测试载入不同的配置文件
领域实体加入 ENUM 支持
... 更新太多不一一说明了。
QueryPHP 拥有 6.5 万行源代码,单元测试代码为 75000 行,当然包含注释和空格,拥有 2829 条测试用例和 9245 条断言,充分的单元测试保证了我们代码的稳定性和质量。
QueryPHP 其中一个使命就是单元测试带入的企业开发,以及给同行抛砖引玉,促进共同进步。
Test and Deploy Your Code with Confidence
==> ...View\Compiler\CompilerForTest ✓ ✓ ✓ ✓ ✓ ✓ ==> ...\View\Compiler\CompilerIfTest ✓ ==> ...\Compiler\CompilerIncludeTest ✓ ==> ...iew\Compiler\CompilerListTest ✓ ==> ...ew\Compiler\CompilerListsTest ✓ ✓ ✓ ==> ...ompilerPairedTagExceptionTest ✓ ✓ ✓ ✓ ✓ ==> ...View\Compiler\CompilerPhpTest ✓ ==> ...ew\Compiler\CompilerQuickTest ✓ ==> ...\Compiler\CompilerTagselfTest ✓ ==> ...View\Compiler\CompilerVarTest ✓ ✓ ✓ ✓ ✓ ==> ...ew\Compiler\CompilerWhileTest ✓ ==> Tests\View\HtmlTest ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ==> Tests\View\ManagerTest ✓ ==> Tests\View\PhpuiTest ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ==> Tests\View\Provider\RegisterTest ✓ ==> Tests\View\TwigTest ✓ ✓ ✓ ✓ ==> Tests\View\V8jsTest → → → → → → → → → Time: 1.32 minutes, Memory: 84.00MB OK, but incomplete, skipped, or risky tests! Tests: 2829, Assertions: 9245, Skipped: 9. Generating code coverage report in Clover XML format ... done
为什么要特别强调单元测试,这是国内一个 PHP 轮子普遍的一个非常大的痛点,欧美国家的轮子做得非常不错,片面追求功能炫酷吊炸天,外强中干。
在早年的时候,我也从来不写单元测试觉得没什么用。做好一个功能,在控制器去调用一下,测试一哈是否正常,正常则通过。随着时间的流逝,这个控制器中的代码会被删除而丢失,当我们添加一个新功能或者修改已有的功能,分分钟改挂以前的功能,造成 bug 无穷无尽。
单元测试的好处
软件质量最简单、最有效的保证;
是目标代码最清晰、最有效的文档;
可以优化目标代码的设计;
是代码重构的保障;
是回归测试和持续集成的基石。
QueryPHP 在未来将加大力度提供更重的单元测试彻底消灭低级 BUG,为中国创业提供公司提供稳定的 WEB 框架。
composer create-project hunzhiwange/queryphp myapp dev-master
php leevel server <Visite http://127.0.0.1:9527/>
Mvc restful 路由 http://127.0.0.1:9527/restful/123
指定方法的 Mvc restful 路由 http://127.0.0.1:9527/restful/123/show
注解路由 http://127.0.0.1:9527/api/v1/petLeevelForApi/helloworld
php leevel link:public http://127.0.0.1:9527/public/css/page.css
php leevel link:storage http://127.0.0.1:9527/storage/logo.png
php leevel link:apis http://127.0.0.1:9527/apis/
php leevel link:debugbar http://127.0.0.1:9527/debugbar/debugbar.css
CREATE DATABASE IF NOT EXISTS myapp DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
vim .env
... // Database DATABASE_DRIVER = mysql DATABASE_HOST = 127.0.0.1 DATABASE_PORT = 3306 DATABASE_NAME = queryphp_development_db DATABASE_USER = root DATABASE_PASSWORD = ...
to
... // Database DATABASE_DRIVER = mysql DATABASE_HOST = 127.0.0.1 DATABASE_PORT = 3306 DATABASE_NAME = myapp DATABASE_USER = root DATABASE_PASSWORD = 123456 ...
php leevel migrate:migrate php leevel server
http://127.0.0.1:9527/api/entity
{ count: 4, :trace: { ... } }
第一步安装前端,细节信息可以在 frontend/README.md
查看.
cd frontend npm install -g cnpm --registry=https://registry.npm.taobao.org // Just once cnpm install npm run serve # npm run dev
接着访问这个登陆地址. http://127.0.0.1:9528/#/login
user: admin password: 123456
1
iiusky 2018-12-11 14:07:43 +08:00 1
支持 oauth2 server 么?
|
2
fenglangjuxu 2018-12-11 14:20:33 +08:00
支持
|
3
dobelee 2018-12-11 14:26:31 +08:00 via Android
mark。
|
4
doyouhaobaby OP @iiusky 类似吧
https://github.com/hunzhiwange/queryphp/blob/master/frontend/.env.example VUE_APP_BASE_API=http://127.0.0.1:9527 // 应用接入信息,对应数据库中 app VUE_APP_APP_ID=admin VUE_APP_APP_KEY=B1DA4485-B49D-D8E3-0F9E-168D7605A797 提供一个 APP_ID,APP_KEY,然后 用户名和密码,像是 oauth2 的 password 模式,没得刷新 token |
5
wbrobot 2018-12-11 14:52:34 +08:00
真羡慕年轻人闲,搞出这么个吃力不讨好,没人用的东西。
|
6
masker 2018-12-11 14:56:42 +08:00 via Android
好丑啊。
|
7
doyouhaobaby OP @wbrobot 公司内部的一些部分项目在用
|