QueryPHP v1-rc.3 发布,更新到 PHP-7.4
QueryPHP v1.0.0-rc.3 主要用 PHP-7.4 新特性对整个框架进行改造,例外增加多个组件的文档,除此之外对 ORM 实体 Entity 进行了优化。
QueryPHP 1.0.0 正式版快完成了,现在主要是推进文档的编写,少量的优化。
关于 QueryPHP
QueryPHP 是一款现代化的高性能 PHP 渐进式协程框架, 我们还是主要面向传统 PHP-FPM 场景,以工程师用户体验为历史使命,让每一个 PHP 应用都有一个好框架。
百分之百单元测试覆盖直面 Bug,致力于创造高品质的产品 level level leevel,依托 Swoole 协程提升业务性能,此刻未来逐步渐进。 我们的愿景是USE LEEVEL WITH SWOOLE DO BETTER, 让您的业务撑起更多的用户服务。
更新日志
- 【framework】使用 PHP 7.4 的新语法重构代码,主要是整个框架和应用的类属性类型支持。
- 【framework】强化了 php leevel make:entity 功能,能实现局部自动更新表结构,支持两种 getter setter。
- 【framework】修复了实体 Entity 在模拟 replace 场景中不存在主键自动忽略并返回重构
- 【framework】改进多语言文档生成的 `uses`
样式以及
删除 Doc::getClassBody多余的 `uses` - 【framework】tableColumns 返回更多字段信息,以及加入表的注释,目前用于生成实体的文件名字
- 【framework】composer 加入一个常用 scripts,比如 composer migrate,composer test
- 【framework】配置 php_cs no_superfluous_phpdoc_tags 清理掉系统无用的注释,删除掉文件头部的 author version since 等注释
- 【framework】分页第一页从 1 开始,小于 1 将抛出异常统一规范
- 【framework】简化所有验证器规则 Leevel\Validate\Helper\validate_accepted 为 Leevel\Validate\Helper\accepted
- 【framework】修复部分助手函数的 bug,并精简 api 命名,Leevel\Session\Helper|session_set 改为 Leevel\Session\Helper|set
- 【framework】增加部分 HTTP 组件文档
- 【framework】增加小部分 Swoole 文档
- 【framework】新增 Option 配文档
- 【framework】新增 Cache 缓文档
- 【framework】新增 Session 文档
- 【framework】新增 Page 分页文档
- 【framework】新增 Log 日志文档
- 【framework】新增 Seccode 验证码文档
- 【application】php 7.4 类型属性支持
- 【application】精简所有注释,删除所有 author version 等信息
- 【application】重新更新到全新的实体 entity
- 【application】composer 加入一个常用 scripts,比如 composer migrate,composer test
RoadMap
- 【framework】rc.1-6 是整个框架发布 GA 版最后几个版本。
- 【framework】RC 版本只修复 BUG、单元测试 和文档完善,不排除可能有一些必要的功能微调。
- 【framework】QueryPHP v1.0.0 正式版本计划是在 2019.12 或者 2020.01 发布。
安装
composer create-project hunzhiwange/queryphp myapp dev-master php leevel server <Visite http://127.0.0.1:9527/>
运行基于 IViewUI 的通用权限系统
cd /data/codes/queryphp/frontend npm install npm run dev cd /data/codes/queryphp php leevel server http://127.0.0.1:9528/#/login
PHP 7.4
类属性类型支持
早在 PHP-7.4 alpha.1 开始就拉了一个分支编写 PHP-7.4,所以在这个版本已经全部重构完毕并合并。
https://github.com/hunzhiwange/framework/blob/master/src/Leevel/Router/Router.php
<?php declare(strict_types=1); namespace Leevel\Router; use Leevel\Di\IContainer; use Leevel\Http\IRequest; use Leevel\Http\IResponse; use Leevel\Http\Response; use Leevel\Pipeline\Pipeline; /** * 路由解析. */ class Router implements IRouter { /** * IOC Container. * * @var \Leevel\Di\IContainer */ protected IContainer $container; /** * HTTP 请求 * * @var \Leevel\Http\IRequest */ protected IRequest $request; /** * 路由匹配数据. * * @var null|array */ protected ?array $matchedData = null; ... }
短闭包
https://github.com/hunzhiwange/framework/blob/master/src/Leevel/Router/Provider/Register.php
除了短闭包,还有不少协变逆变的应用。
<?php declare(strict_types=1); namespace Leevel\Router\Provider; ... /** * router 服务提供者. */ class Register extends Provider { /** * 注册 router 服务. */ protected function router(): void { $this->container ->singleton( 'router', fn (IContainer $container): Router => new Router($container), ); }
强化的实体生成
系统支持两种实体展示,功能一致,可以满足不同的方式,支持局部更新 `--refresh` 和 强制更新
`--force`。
支持软删除 const DELETE_AT 和 show_prop_black 隐私属性的支持。
php leevel make:entity user --subdir=user
https://github.com/hunzhiwange/queryphp/blob/master/common/Domain/Entity/User/User.php
<?php declare(strict_types=1); /* * This file is part of the your app package. * * The PHP Application For Code Poem For You. * (c) 2018-2099 http://yourdomian.com All rights reserved. * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Common\Domain\Entity\User; use Leevel\Database\Ddd\Entity; use Leevel\Database\Ddd\Relation\ManyMany; /** * 用户. */ class User extends Entity { /** * Database table. * * @var string */ const TABLE = 'user'; /** * Primary key. * * @var string */ const ID = 'id'; /** * Auto increment. * * @var string */ const AUTO = 'id'; /** * Entity struct. * * - id * comment: ID type: int(11) unsigned null: false * key: PRI default: null extra: auto_increment * - name * comment: 用户名字 type: varchar(64) null: false * key: default: extra: * - num * comment: 编号 type: varchar(64) null: false * key: MUL default: extra: * - password * comment: 密码 type: varchar(255) null: false * key: default: extra: * - email * comment: Email type: varchar(100) null: false * key: default: extra: * - mobile * comment: 手机 type: char(11) null: false * key: default: extra: * - status * comment: 状态 0=禁用;1=启用; type: tinyint(4) null: false * key: default: 1 extra: * - create_at * comment: 创建时间 type: datetime null: false * key: default: CURRENT_TIMESTAMP extra: * - update_at * comment: 更新时间 type: datetime null: false * key: default: CURRENT_TIMESTAMP extra: on update CURRENT_TIMESTAMP * - delete_at * comment: 删除时间 0=未删除;大于0=删除时间; type: bigint(20) unsigned null: false * key: default: 0 extra: * - create_account * comment: 创建账号 type: int(11) unsigned null: false * key: default: 0 extra: * - update_account * comment: 更新账号 type: int(11) unsigned null: false * key: default: 0 extra: * * @var array */ const STRUCT = [ 'id' => [ self::READONLY => true, ], 'name' => [ ], 'num' => [ ], 'password' => [ self::SHOW_PROP_BLACK => true, ], 'email' => [ ], 'mobile' => [ ], 'status' => [ ], 'create_at' => [ ], 'update_at' => [ self::SHOW_PROP_BLACK => true, ], 'delete_at' => [ self::SHOW_PROP_BLACK => true, ], 'create_account' => [ self::SHOW_PROP_BLACK => true, ], 'update_account' => [ self::SHOW_PROP_BLACK => true, ], 'role' => [ self::MANY_MANY => Role::class, self::MIDDLE_ENTITY => UserRole::class, self::SOURCE_KEY => 'id', self::TARGET_KEY => 'id', self::MIDDLE_SOURCE_KEY => 'user_id', self::MIDDLE_TARGET_KEY => 'role_id', self::RELATION_SCOPE => 'role', ], ]; /** * Soft delete column. * * @var string */ const DELETE_AT = 'delete_at'; /** * 状态值. * * @var array */ const STATUS_ENUM = [ 'disable' => [0, '禁用'], 'enable' => [1, '启用'], ]; /** * Prop data. * * @var array */ private array $data = []; /** * Database connect. * * @var mixed */ private static $connect; /** * Setter. * * @param mixed $value */ public function setter(string $prop, $value): self { $this->data[$this->realProp($prop)] = $value; return $this; } /** * Getter. * * @return mixed */ public function getter(string $prop) { return $this->data[$this->realProp($prop)] ?? null; } /** * Set database connect. * * @param mixed $connect */ public static function withConnect($connect): void { static::$connect = $connect; } /** * Get database connect. */ public static function connect() { return static::$connect; } /** * 角色关联查询作用域. */ protected function relationScopeRole(ManyMany $relation): void { $relation->setColumns(['id', 'name']); } }
php leevel make:entity user --subdir=user --prop
<?php declare(strict_types=1); /* * This file is part of the your app package. * * The PHP Application For Code Poem For You. * (c) 2018-2099 http://yourdomian.com All rights reserved. * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Common\Domain\Entity\User; use Leevel\Database\Ddd\Entity; /** * 用户. */ class User extends Entity { /** * Database table. * * @var string */ const TABLE = 'user'; /** * Primary key. * * @var string */ const ID = 'id'; /** * Auto increment. * * @var string */ const AUTO = 'id'; /** * Entity struct. * * - id * comment: ID type: int(11) unsigned null: false * key: PRI default: null extra: auto_increment * - name * comment: 用户名字 type: varchar(64) null: false * key: default: extra: * - num * comment: 编号 type: varchar(64) null: false * key: MUL default: extra: * - password * comment: 密码 type: varchar(255) null: false * key: default: extra: * - email * comment: Email type: varchar(100) null: false * key: default: extra: * - mobile * comment: 手机 type: char(11) null: false * key: default: extra: * - status * comment: 状态 0=禁用;1=启用; type: tinyint(4) null: false * key: default: 1 extra: * - create_at * comment: 创建时间 type: datetime null: false * key: default: CURRENT_TIMESTAMP extra: * - update_at * comment: 更新时间 type: datetime null: false * key: default: CURRENT_TIMESTAMP extra: on update CURRENT_TIMESTAMP * - delete_at * comment: 删除时间 0=未删除;大于0=删除时间; type: bigint(20) unsigned null: false * key: default: 0 extra: * - create_account * comment: 创建账号 type: int(11) unsigned null: false * key: default: 0 extra: * - update_account * comment: 更新账号 type: int(11) unsigned null: false * key: default: 0 extra: * * @var array */ const STRUCT = [ 'id' => [ self::READONLY => true, ], 'name' => [ ], 'num' => [ ], 'password' => [ ], 'email' => [ ], 'mobile' => [ ], 'status' => [ ], 'create_at' => [ ], 'update_at' => [ self::SHOW_PROP_BLACK => true, ], 'delete_at' => [ self::SHOW_PROP_BLACK => true, ], 'create_account' => [ self::SHOW_PROP_BLACK => true, ], 'update_account' => [ self::SHOW_PROP_BLACK => true, ], ]; /** * Soft delete column. * * @var string */ const DELETE_AT = 'delete_at'; /** * ID. */ private $_id; /** * 用户名字. */ private $_name; /** * 编号. */ private $_num; /** * 密码. */ private $_password; /** * Email. */ private $_email; /** * 手机. */ private $_mobile; /** * 状态 0=禁用;1=启用;. */ private $_status; /** * 创建时间. */ private $_createAt; /** * 更新时间. */ private $_updateAt; /** * 删除时间 0=未删除;大于0=删除时间;. */ private $_deleteAt; /** * 创建账号. */ private $_createAccount; /** * 更新账号. */ private $_updateAccount; /** * Database connect. * * @var mixed */ private static $connect; /** * Setter. * * @param mixed $value */ public function setter(string $prop, $value): self { $this->{'_'.$this->realProp($prop)} = $value; return $this; } /** * Getter. * * @return mixed */ public function getter(string $prop) { return $this->{'_'.$this->realProp($prop)}; } /** * Set database connect. * * @param mixed $connect */ public static function withConnect($connect): void { static::$connect = $connect; } /** * Get database connect. */ public static function connect() { return static::$connect; } }
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Java 通用代码生成器光 1.5.0 Kama( 顿悟)发布尝鲜版 8,支持克隆动词,即将进入 Beta 测试
Java通用代码生成器光1.5.0 Kama(顿悟)发布尝鲜版8,支持克隆动词,即将进入Beta测试 Java通用代码生成器光1.5.0 Kama(顿悟)发布尝鲜版8,支持两个克隆动词,即将进入Beta测试,功能已冻结。 项目地址: https://gitee.com/jerryshensjf/LightSBMEU 二进制发布版下载地址: https://gitee.com/jerryshensjf/LightSBMEU/attach_files 第三代动词算子式代码生成器:光SBMEU版 本代码生成器支持前后端分离界面了 简介 第三代动词算子式代码生成器:光SBMEU版,采用Maven, EasyUI,SpringBoot 2, MyBatis, MariaDB 技术栈 欢迎大家使用由无垠式,和平之翼和光三代动词算子式代码生成器组成的动词算子式代码生成器阵列,在我的码云站点https://gitee.com/jerryshensjf/大家可以找到这些代码生成器。把他们统统部署在Tomcat中,您可以获得超过600N的代码变形能力。 研发进展 正在研发1.5版,1.0将不发正式版,直接...
- 下一篇
阿里云服务器ECS配置选择指南【小白教程】
对于有一定用户的网站来说,选择服务器来建网站势在必行。服务器的配置项很多,很多服务器使用新手并不知道该如何正确的去选择服务器配置。 下面笔者就以阿里云ECS服务器为例,教大家如何选择阿里云ECS服务器配置。 方法/步骤 ①、进入【云小站-领券】,未注册先注册账号;②、点击【产品】-【ECS服务器】-【立即购买】;③、计费方式选择【包年包月】,地域选择要根据自己网站客户群体的地理位置,如:网站的用户群体主要在北方,就选择【华北】; ④、实例选择就是选择什么样的配置。对于中小型网站,可以选择【通用型g5】,2核CPU+8G内存; ⑤、系统镜像选择【镜像市场】。因为这涉及到以后服务器的环境安装,具体见:ECS服务器如何安装PHP+MYSQL环境; ⑥、存储的系统盘,推荐选择40G的SSD云盘,性能更好一些。 ⑦、公网宽度,要勾选【分配公网IP地址】,按固定带宽,选择2M; ⑧、安全组,要开启HTTP 80 端口和HTTPS 443 端口; ⑨、登录凭证可以选择【自定义密码】,自己设置一个密码即可; 其它配置均可使用默认即可。通过以上的配置,我们就可以根据自己需求选择好阿里云ECS服务器配置了...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8安装Docker,最新的服务器搭配容器使用
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7安装Docker,走上虚拟化容器引擎之路