Quantcast
Channel: OSCHINA 社区最新新闻
Viewing all 44787 articles
Browse latest View live

ThinkPHP 5.* 发布安全更新 —— 5.1.31 版本

$
0
0

本次版本更新主要涉及一个安全更新,由于框架对控制器名没有进行足够的检测会导致在没有开启强制路由的情况下可能的getshell漏洞,受影响的版本包括5.05.1版本,推荐尽快更新到最新版本。如果暂时无法更新到最新版本,请开启强制路由。

V5.1.31

  • 改进field方法

  • 改进count方法返回类型

  • download函数增加在浏览器中显示文件功能

  • 修正多对多模型的中间表数据写入

  • 改进sqlsrv驱动支持多个Schemas模式查询

  • 统一助手函数与\think\response\Download函数文件过期时间

  • 完善关联模型的save方法 增加make方法仅创建对象不保存

  • 修改条件表达式对静态变量的支持

  • 修正控制器名获取

  • 改进view方法的field解析

V5.0.23

  • Query支持调用模型的查询范围

  • 聚合查询字段支持DISTINCT

  • 改进闭包验证的参数

  • 多对多关联支持指定中间表数据名称

  • after/before验证支持指定字段验证

  • 改进多对多关联

  • 改进验证类

  • 增加afterWithbeforeWith验证规则 用于比较日期字段

  • 完善规则提示

  • 改进断线重连

  • 修正软删除的destroy方法

  • 修复模型的save方法当data变量为空 数据不验证

  • 模型增加replace方法

  • MorphOne 增加 make 方法创建关联对象实例

  • 改进count方法返回值类型

  • 改进聚合查询方法的正则判断

  • 改进sqlsrv驱动

  • 完善关联的save方法

  • 修正控制器名获取


MeEdu,开源免费的在线教育系统 beta8 版本上线

$
0
0

新增

  • 傻瓜式安装

  • 插件目录

  • 多模板目录

  • 未支付订单可继续支付

  • 课程章节

优化

  • 前台播放器SDK

  • 短信图形验证码的二次更换

  • 后台视频上传显示改为tab

  • 界面细节调整

下载地址:https://gitee.com/myteng/MeEdu/tags

Gitee:https://gitee.com/myteng/MeEdu

Github:https://github.com/Qsnh/meedu

小程序:https://github.com/YTU94/meedu-wxapp

MeEdu 是一个基于Laravel开发的在线点播系统,寄托了我对当前知识付费领域的期望。我相信未来的每位身负技能的人都可以通过 MeEdu 来构建自己的知识付费应用,通过 MeEdu 将自己的知识进行变现。

傻瓜安装预览:

goserver 0.3 发布,Golang 中的 Spring

$
0
0

goserver 0.3 发布,

类似JAVA的spring.

#两种方式使用 goserver 

  • 配置文件,类似spring的配置文件 

  • 建一个go main导入插件方式

  • cmd/App.go 默认导入了所有实现的插件,可以根据项目的需要,只导入自己需要的

新增功能

  • 注册插件

  • WebSocket

  • 完全插件化

 

Linux Kernel 4.20 RC6 发布

$
0
0

Linux Kernel 4.20 RC6 发布了。

Linus 在邮件中指出该版本看起来极其普通,只有不到一半的补丁是关于驱动程序的,包括 gpu、网络、nvdimm、block 和媒体等,其它的是核心网络工具(主要是 bpf 自检)和文档更新,还有一些文件系统、核心内核和 mm 修复程序。

Linus 还表示,目前没什么大问题,至少还会再发布一个 RC 版本,然后如果没有特殊情况发生,那么 4.20 正式版将会在圣诞节前发布,也就保持了以往的发布规律,RC7 之后发布正式版。

更新详情查看归档邮件

OrientDB 3.0.12 发布,多模 NoSQL 数据库

$
0
0

OrientDB 3.0.12 发布了,OrientDB 是兼具文档数据库的灵活性和图形数据库管理链接能力的可深层次扩展的文档-图形数据库管理系统。可选无模式、全模式或混合模式。支持许多高级特性,诸如 ACID 事务、快速索引、原生和 SQL 查询功能。可以导入 JSON 格式、导出文档。

此次更新如下:

Core

Console

  • Add checks to avoid wrong db drop from console Issue #8690

SQL

  • Fix decoding of special characters (eg. \n \t ) in SQL strings inside JSON Issue #8681

  • Fix calculation of SQL function parameters, also including context and metadata values (eg. LET values) Issue #8671

  • Fix SQL CONTAINS with lists of lists Issue #8653

  • Fix nested projections on INSERT RETURN statement Issue #8543

JDBC Driver

  • Fix NullPointerException on JDBC getByte() and getBoolean() Issue #8677

  • Fix JDBC ResultSet.wasNull() Issue #8674

Enhancements

Console

更新日志

下载地址:https://orientdb.com/download-2/

Apache Hivemall 0.5.2 发布,可扩展的机器学习库

$
0
0

Apache Hivemall 0.5.2 发布了,Apache Hivemall 基于 Hive UDF/UDAF/UDTF,是一个可扩展的机器学习库,运行基于 Hadoop 的数据处理框架,特别是 Apache Hive、Apache Spark 和 Apache Pig。

更新主要内容包括:

New Feature

Improvement

  • [HIVEMALL-24] - Fix the prediction logic of Field-aware Factorization Machines more scalable

  • [HIVEMALL-46] - Make it more simpler to upgrade Spark versions

  • [HIVEMALL-172] - Change tree_predict 3rd argument to accept string options

  • [HIVEMALL-179] - Support Spark 2.3

  • [HIVEMALL-180] - Drop the Spark-2.0 support

  • [HIVEMALL-191] - Add Kryo serialization tests and remove existing workaround lazy instantiation code

  • [HIVEMALL-193] - Implement a tool for generating a list of Hivemall UDFs

  • [HIVEMALL-201] - Evaluate, fix and document FFM so Hivemall produces comparable accuracy to LIBFFM

  • [HIVEMALL-203] - Relocate Jackson package for to_json/from_json

  • [HIVEMALL-212] - Fix Classifier/Regressor not to forward zero weighted values

  • [HIVEMALL-215] - [DOC] Add step-by-step tutorial on the document

  • [HIVEMALL-222] - Introduce Gradient Clipping to avoid exploding gradient to General Classifier/Regressor

  • [HIVEMALL-223] - Add `-kv_map` and `-vk_map` option to to_ordered_list UDAF

详情查看更新日志

下载地址:http://hivemall.incubator.apache.org/download.html

Git 2.20.0 发布,各方面大量更新

$
0
0

Git 2.20.0 发布了,Git 是一个分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。

此版本对兼容性、UI、工作流、功能、性能、内部实现、开发支持等都做了大量更新,此外还有众多的 bug 修复。

详情查看发布说明

下载地址:

Jedis 2.9.1、2.10.0 与 3.0.0 发布,Redis 的 Java 客户端

$
0
0

Jedis 2.9.1、2.10.0 与 3.0.0 发布了,Jedis 是 Redis 的 Java 客户端,它易于使用,与 Redis 2.8.x 和 3.x.x 完全兼容。

2.9.1 与 2.10.0 更新:

  • JedisCluster 扫描 bug 修复 (#1902)

3.0.0 更新:

  • 从 xetorthio/gkorland-patch-1 合并 PR #1897

  • 更新 README.md

发布公告与下载地址:https://github.com/xetorthio/jedis/releases


Framework7 3.6.1 发布,跨平台移动混合与 Web 应用框架

$
0
0

Framework7 3.6.1 发布了,Framework7 是一个开源的全功能 HTML 框架,用于构建具有 iOS 和 Android 原生外观的混合移动应用程序或 Web 应用程序。同时 Framework7 也是独立的原型应用工具。Framework7 并不与所有平台兼容,它更多地专注于 iOS 和 Google Material Design,带来最佳体验和简单性。

此版本更新如下:

Phenome (React / Vue)

  • Tabs - 修复了已损坏的动画/可滑动 tab 问题。

更新日志

下载地址:

Rocket 0.4 发布,改进查询、内建数据库支持、uri! 宏

$
0
0

Rocket 0.4 发布了,Rocket 是 Rust 的 Web 框架,专注于可用性、安全性和性能。

此版本向各个方向都迈进了一步,带来了各项新功能和改进,可提高开发人员的工作效率,提高应用程序的安全性和稳健性,提供新的可扩展性,并提供更新的工具链稳定性。

主要亮点包括:

Codegen 重写

rocket_codegen 包已被完全重写为使用稳定的过程宏 API,之前它使用私有的、不稳定的 rustc API。

新的 Rocket 应用导入方式:

- #![feature(plugin)]
- #![plugin(rocket_codegen)]
+ #![feature(proc_macro_hygiene, decl_macro)]

- extern crate rocket;
+ #[macro_use] extern crate rocket;

rocket_codegen 不应该直接依赖,需要从 Cargo.toml 中删除:

[dependencies]
- rocket = "0.3"
+ rocket = "0.4"
- rocket_codegen = "0.3"

类型化 URI

0.4 引入了 uri! 宏,允许开发者以健壮、类型安全和 URI 安全的方式构造 URI 路由。类型或路由参数不匹配将在编译时被捕获,并且对路由 URI 的更改会自动反映在生成的 URI 中。

下边这个路由:

#[get("/person/<name>?<age>")]
fn person(name: String, age: Option<u8>)

可以按如下方式创建 person 路由的 URI:

// with unnamed parameters, in route URI declaration order
let uri = uri!(person: "Mike Smith", 28);
assert_eq!(uri.to_string(), "/person/Mike%20Smith?age=28");

// with named parameters, order irrelevant
let uri = uri!(person: name = "Mike", age = 28);
let uri = uri!(person: age = 28, name = "Mike");
assert_eq!(uri.to_string(), "/person/Mike?age=28");

// with a specific mount-point
let uri = uri!("/api", person: name = "Mike", age = 28);
assert_eq!(uri.to_string(), "/api/person/Mike?age=28");

// with optional query parameters ignored
let uri = uri!(person: "Mike", _);
let uri = uri!(person: name = "Mike", age = _);
assert_eq!(uri.to_string(), "/person/Mike");

如果路由的 URI 以不兼容的方式更改,或者错误参数类型不对,Rocket 会在编译时通过一条消息通知:

error: person route uri expects 2 parameters but 1 was supplied
 --> examples/uri/src/main.rs:9:29
  |
9 |     uri!(person: "Mike Smith");
  |                  ^^^^^^^^^^^^
  |
  = note: expected parameters: name: String, age: Option<u8>

类型错误:

error: the trait bound u8: FromUriParam<Query, &str> is not satisfied
 --> examples/uri/src/main.rs:9:35
  |
9 |     uri!(person: age = "10", name = "Mike");
  |                        ^^^^ FromUriParam<Query, &str> is not implemented for u8
  |

数据库支持

Rocket 0.4 内建了对 ORM 无关的数据库连接池的支持,允许通过三个简单的自动化步骤,通过连接池轻松配置和连接 Rocket 应用程序到数据库:

  1. Rocket.toml 中配置数据库。

  2. 将请求 guard 类型和 fairing 与每个数据库相关联。

  3. 使用请求 guard 来检索处理程序中的连接。

改进查询

查询字符串处理已经彻底改进,解决了 Rocket 呼声最高的请求 #608。新查询处理路由语法和语义的设计考虑了以下目标:

  • 启用静态查询组件的匹配。

  • 任何情况都不存在 special-casing,而是类型驱动的流量。

  • 特定的查询 key/value 对 Ad-hoc 匹配。

  • 默认情况下是宽松解析,允许缺少参数。

  • 查询参数顺序无关匹配。

有状态的 Handler

Handler 类型已经一般可用,这用于实现新 Handler trait 的任何类型。新的 StaticFiles contrib 类型使用此功能提供比以往更容易的静态文件服务,例如,要在 /public 中访问 /static 目录中的本地文件,只需编写:

fn main() {
    rocket::ignite()
        .mount("/public", StaticFiles::from("/static"))
        .launch();
}

Responder 派生

可以使用命名字段将 Responder trait 派生为 enum 和 struct,这极大地简化了从单个处理程序返回多种类型的响应。

实时模板重载

在运行时自动重新加载更改的模板,无需重新编译,适用于所有主要平台。出于安全性和性能原因,仅在以调试模式编译应用程序时才启用该功能。

What's Next

关于下一版本 0.5,重点仍然是可用性、稳定性、安全性和性能。Rocket 0.5 的 roadmap:

  • 支持 Rust stable 

  • 异步请求处理

  • Multipart Form 支持

  • 更强的 CSRF 和 XSS 保护

此外还有许多其它的新功能和功能改进,详情查看发布公告。

下载地址:

Ant Design 3.11.2 发布,阿里开源的企业级 UI 设计语言

$
0
0

Ant Design 3.11.2 发布了,Ant Design 是阿里开源的一套企业级的 UI 设计语言和 React 实现,使用 TypeScript 构建,提供完整的类型定义文件,自带提炼自企业级中后台产品的交互语言和视觉风格、开箱即用的高质量 React 组件与全链路开发和设计工具体系。

此版本更新如下:

  • 修复 Table 使用自定义列头时报 Cannot read property 'children' of undefined 的问题。#13542@geraldchen890806

  • 修复另一个 Input 在自定义了 less 变量 @border-width-base 时的边框问题。#13534 @morenyang

  • 修复 Upload 的 beforeUpload 方法返回 Promise 时不支持 resolve Blob 对象的问题。#13528@huanz

  • #13536

  • 修复 Dropdown 两个属性的 TypeScript 定义。#13536 @wangxingkang

发布公告

下载地址:

Mageia 7 Beta 1 发布,Mandriva Linux 社区分支

$
0
0

Mageia 7 Beta 1 发布了,Mageia 是 Mandriva Linux 于 2010 年 9 月形成的社区分支。


此版本主要更新内容:

  • kernel 4.19.6

  • rpm 4.14.2

  • Plasma 5.14.2

  • GNOME 3.30

  • Xfce 4.13.4

  • Firefox 63

  • Chromium 70

  • LibreOffice 6.1.3

还将大多数编程语言更新为最新版本,PHP 是其中变化较大的,从 5.6 升级到了 7.2。AppStream 元数据支持也得到了增强,对 GNOME 和 Plasma 各自的软件搜索工具提供了更丰富的软件选择体验,Optimus 和 ARM 的笔记本电脑也得到了改进。

详情查看发布公告

下载地址:https://www.mageia.org/downloads/prerelease/

Linkerd 2.1 发布,路由级指标、服务配置文件、UI 改进

$
0
0

Linkerd 2.1 发布了,Linkerd 是一个提供弹性云端原生应用服务网格(Service Mesh)的开源项目,也是面向微服务的开源 RPC 代理,它的核心是一个透明代理。

此版本更新亮点包括路由级别指标、服务配置文件和改进的仪表板 UI,还添加了一些实验性功能,包括代理自动注入、单命名空间安装以及控制平面的高可用性模式。

路由级别指标

Linkerd 现在不仅可以在服务级别提供指标,还可以在路由级别提供指标。这意味着 Linkerd 可以显示服务中特定 API 调用的流量级别故障、减速或更改。

例如,以下是具有多个 API 端点的名为“webapp”服务的路由度量标准:


UI 的顶部显示了传入和传出依赖关系的拓扑,底部显示路线指标。从这一点可以看出,/books 和 /books/<id>/edit 路线失败,成功率远低于 50%,而服务上的所有其它路线都很好。这比仅仅知道“webapp”服务的成功率高达 80% 要好得多!

每个路由度量标准建立在 Linkerd 2.1 的另一个重要补充之上:服务配置文件。

服务配置文件

Linkerd 2.1 引入了服务配置文件的概念,这是一种向 Linkerd 提供服务信息的轻量级方法。此信息包括服务的路由,即预期响应的 API 调用,以及 Linkerd 应如何处理这些路由。(服务配置文件是作为 Kubernetes CRD 实现的,将 Linkerd 创建的 Kubernetes CRD 的总数增加到 1)

服务配置文件为项目提供了基本构建块:能够在每个服务的基础上配置 Linkerd 的行为。在即将发布的版本中,还将添加许多基于服务配置文件的功能,包括重试、断路、速率限制和超时。

服务配置文件也是 Linkerd 2.x 背后设计理念的一个很好的证明,通过在服务级别而不是全局级别附加配置,确保 Linkerd 可以继续逐步采用”一次一个服务“。

新 UI

通过多种方式改进了 Web 仪表板,包括切换到 Material UI,对于熟悉 Kubernetes 仪表板的人来说,这样会比较熟悉:


详情查看发布公告

下载地址:https://github.com/linkerd/linkerd2/releases/tag/stable-2.1.0

更新:

curl https://run.linkerd.io/install

Mapper 4.1.1 发布,Mybatis 通用 Mapper

$
0
0

Mapper 4.1.1

  • 修复正常场景下逻辑删除注解会出现的严重 Bug

  • 去掉了4.0.3版本增加的更新时的 set id = id 功能,避免不必要的更新,需要自己在业务层避免更新空对象时的 SQL 语法错误。

  • ColumnType、LogicDelete、Order、Version 四个注解现在可以用于方法上了。

  • 解决 @KeySql GenId 覆盖已有 ID 的问题 fixed #482

  • 解决 Example 中 public Criteria andEqualTo(Object param) 参数可能为 null 时的错误 fixed #425

MVN 依赖如下:

<dependency>    
  <groupId>tk.mybatis</groupId>    
  <artifactId>mapper</artifactId>    
  <version>4.1.1</version>
</dependency>

同时发布了 Mapper Spring Boot Starter 2.11,和 4.1.1 版本同步。

Stater 依赖如下

<dependency>    
  <groupId>tk.mybatis</groupId>
  <artifactId>mapper-spring-boot-starter</artifactId>
  <version>2.1.1</version>
</dependency>

smart-doc 1.6 发布,Java 零注解文档生成工具

$
0
0

smart-doc是一个java restful api文档生成工具,smart-doc颠覆了传统类似swagger这种大量采用注解侵入来生成文档的实现方法。smart-doc完全基于接口源码分析来生成接口文档,完全做到零注解侵入,你只需要按照java标准注释的写就能得到一个标准的markdown接口文档。如果你已经厌倦了swagger等文档工具的注解和强侵入污染,那请拥抱smart-doc吧!

更新内容

  • 优化smart-doc对jdk 8中localDate和LocalDateTime的字段类型的文档推导显示

致谢

    感谢下列同学对问题的反馈

DEMO

使用demo

相关文档

关于java web restful api文档的重新探索

smart-doc功能使用介绍


Leevel v1.0.0-alpha.2 发布,基于 zephir 高性能 PHP 扩展开发框架

$
0
0

Leevel 是一个开源 PHP C 扩展开发框架,采用 zephir 编写,是为了解决使用框架带来性能下降的经典矛盾,Leevel 是为了解决 QueryPHP 性能而开发,可以与同版本的 QueryPHP 混合使用,将接管 composer 中的 PHP 版本功能。

存在的意义?

Leevel 和 QueryPHP 一般配合使用,基本上不会推荐单独使用,一句话就是替代部分 QueryPHP 中的功能。


单独使用可以作为一个库来使用,性能还是不错的。可以配合 Yaf 使用,Leevel 提供了 缓存,IOC 容器,日志,Session 等。

 

更新日志

本次版本的发布主要是随着 QueryPHP 对应着一个基于 IView 的通用权限系统做了一些调整,更新记录见下面的 URL。

hunzhiwange/leevel

  • 修正一处集合的 BUG

  • 完善 leevel/support/type.zep 返回值类型

  • Restful 路由没有参数时为首页 index 而不是 show

  • 删除兼容获取 pathInfo 的获取方法 ?_url=xx,由 Nginx 可以做到

  • 对 axios 等前端提交类型 application/json 时自动处理表单数据

  • 加入一个环境变量 RUNTIME_ENVIRONMENT,利于更好地处理单元测试载入不同的配置文件

 

安装方法

Windows

后续会提供 dll 扩展.

Linux

从下面的仓库下载源代码.

git clone git@github.com:hunzhiwange/leevel.git
cd ext

GCC 编译源码.

$/path/to/phpize
$./configure --with-php-config=/path/to/php-config
$make && make install

将扩展添加到你的 php.ini, 使用 php -m 查看扩展是否被安装.

extension = leevel.so

 

运行测试文件

$cd /data/codes/leevel    
$composer install
$cp ./tests/config.php ./tests/config.local.php // Modify the config
$php vendor/bin/phinx migrate
$php vendor/bin/phpunit tests

 

使用例子

例如 ioc 容器使用方法。

<?php

use Leevel\Di\Container;

$container = new Container();
$container->instance('foo', 'bar');
var_dump($container->make('foo')); // bar

QueryPHP 1.0.0-alpha.2 发布,新增 IViewUI 通用后台权限系统

$
0
0

QueryPHP 渐进式 PHP 常驻框架引擎

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

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

#特性

 

更新日志

距离上一个版本有一个月了,这个我们的 hunzhiwange/framework 已有 94 条跟新日志,hunzhiwange/queryphp 已有 150 条日志,这个版本主要支持一个 IViewUI 开发的通用权限系统。

hunzhiwange/framework

hunzhiwange/queryphp

 

  • 修复模型实体更新 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/>

连接数据库

首先创建一个数据库.

CREATE DATABASE IF NOT EXISTS myapp DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

修改 .env

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: {
     ...
 }
}

登陆到 QueryVue 后台

安装前端

第一步安装前端,细节信息可以在 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

后台首页

 

红色主题的资源列表

imi v0.2.2 发布,1秒增量热更新 + 60余项改进

$
0
0

距离上次发布差不多一个月了,这期间 imi 稳步推进,修复各项问题的同时,增加了不少实用组件和注解。

此次更新,在开发项目的体验也有巨大的提升。imi 的热更新采用了最新的增量更新技术,原本我们的实际项目在 WSL 下热重启需要 6 秒(根据文件增多,逐渐变慢),现在使用框架核心运行时缓存+热更新重启采用增量方式,不管文件增加多少只需 1 秒左右,即可完成热重新重启,极速的体验~

另外我们的框架核心运行时缓存、项目运行时缓存、数据库 Statement 复用等优化,也为开发、生产时的性能及体验打下了坚实的基础。

我们将持续为性能优化,为可靠性优化。

在此要特别感谢 @wi1dcard 一直以来的讨论交流,感谢群里每一位同学。

当前 imi 还不是正式版,就快了,请耐心等待哦!

更新日志:

新增

Redis

  • 新增RedisManager类(getNewInstance/getInstance/release/getDefaultPoolName)

  • 新增Redis类,用于快捷操作,如:Imi\Redis\Redis::set($key, $value)

  • 新增 redis.quickFromRequestContext 配置项,支持配置Redis快捷操作类,使用RequestContext独享连接还是连接池实时争抢

  • Redis连接池配置新增支持uri格式

缓存

  • 新增RedisHash缓存驱动

  • 新增 Cacheable、CacheEvict、CachePut 注解

  • 实现 Cacheable 注解中的 Lockable 嵌套使用

  • 新增 Lock,支持注解锁 Lockable,默认带有 RedisLock 支持

配置

  • 新增支持 Config::get('@currentServer.xxx') 用法,当前服务器配置中不存在则取 @app 中的配置

  • 增加注入值注解的概念,支持 ConfigValue 等注解,可用于注解参数使用配置值

注解

  • 新增 Callback 注解,其 class 可配合 Inject 注解,实现表示bean类方法回调

  • Condition注解的args属性,增加默认值

  • 新增 Compare、ValidateValue 用于验证的注解

  • 新增 ConstValue 注解,从从常量中读取值注入注解属性

验证器

  • Http 验证器新增支持验证 $headers、$cookie、$session

  • 为验证器增加$this支持

其它

  • 新增支持忽略路由URL大小写

  • 实现进程名称统一管理

  • 新增支持方法参数注入

  • 为Bean类统一增加__clone支持

  • 实现了unset()模型类属性的处理

  • 新增用于过滤字段的列表 Imi\Util\FilterableList

  • MySQL、Redis连接池配置新增支持uri格式

  • 新增支持.env环境变量

  • 数据库查询器支持 replace into 用法

  • Model->save()实现方式改为replace

  • @ExtractData 现在可以导出单独的$get/$post/$body等数据了

  • 新增jsonBodyIsObject配置项,设置post body为json时,转为对象还是数组,默认为false数组。可以和@app.jsonBodyIsObject或@currentServer.jsonBodyIsObject配合使用

  • 新增 Pagination 分页计算类

  • 新增 Imi\Util\ObjectArrayHelper::filter() 过滤对象或数组属性的方法

  • 新增热重启耗时输出

优化

  • 完善CoroutineRedisHandler类魔术方法注释

  • 因PHP BUG,放弃使用匿名类,Bean类采用eval()+动态类名,不再使用include Bean缓存文件,Bean缓存相关配置及方法移除。因此,性能有所提升。

  • Worker 进程启动时,重新加载项目配置及组件

  • 调整Db、Redis获取默认连接池名称,使用@currentServer配置

  • 现在缓存的$ttl参数支持传递\DateInterval类型了

  • 完善 LazyArrayObject

  • 将Redis模块中获取到的实例对象,统一改为 Imi\Redis\RedisHandler

  • 优化热更新提示内容、重启逻辑,改为增量方式,性能更高

  • 新增支持构建框架预加载缓存,提升项目开发时的热更新性能

  • 优化onShutdown()时,日志处理如果发生错误或异常,直接输出错误信息

不兼容的调整

  • Imi\Redis\Redis 类更名为 Imi\Redis\CoroutineRedisHandler (连接池中如果有指定,请修改)

  • 方法验证抛出的异常信息,不再包含 "xxx Parameter verification is incorrect" 信息

  • 调整验证注解的args参数格式,注意与之前版本不兼容

  • 弃用Swoole内置序列化,改为php序列化。原因:Swoole官方未来将不再维护序列化功能

  • 信息提示英文规范

修复

  • 修复Db类获取默认连接池名称问题

  • 修复常量注解处理错误

  • 修复master进程的事件无法触发问题

  • 修复服务器配置中注入HttpRoute失效问题

  • 修复热更新在特定情况下filemtime warning问题

  • 修复当使用Swoole MySQL驱动时,Result->getRowCount()报错问题

  • 修复开启一键协程化时,文件缓存写入失败问题

  • 修复一些场景下的可变参数处理问题

  • 修复使用Swoole协程MySQL时,fetchAll \PDO::FETCH_COLUMN 如果不指定$fetchArgument,结果为null问题

  • 修复热重启后,@app.pools配置更改无效问题

  • 修复一处潜在的notice问题

  • 修复出现重复中间件时的问题

  • 修复因@serializable注解导致的,模型插入更新数据缺失问题

  • 修复dev/ext生成问题

介绍

IMI 是基于 Swoole 开发的协程 PHP 开发框架,完美支持 Http、WebSocket、TCP、UDP 开发,拥有常驻内存、协程异步非阻塞IO等优点。

IMI 框架文档丰富,上手容易,致力于让开发者跟使用传统 MVC 框架一样顺手。

IMI 框架底层开发使用了强类型,易维护,性能更强。支持 Aop ,支持使用注解和配置文件注入,完全遵守 PSR-3、4、7、11、15、16 标准规范。

框架的扩展性强,开发者可以根据实际需求,自行开发相关驱动进行扩展。不止于框架本身提供的功能和组件!

官网:https://www.imiphp.com/
文档手册:https://doc.imiphp.com/

代码仓库:
码云:https://gitee.com/yurunsoft/IMI
Github:https://github.com/Yurunsoft/IMI

空项目:https://gitee.com/yurunsoft/empty-imi-demo
功能Demo:https://gitee.com/yurunsoft/imi-demo

寻有缘人

想要加入我们吗?开源项目不能只靠一两个人,而是要靠大家的努力来完善~

我们需要你的加入,你可以做的事(包括但不限于以下):

开源博客系統 Solo 2.9.7 发布,新皮肤 Jane

$
0
0

Solo 是一款一个命令就能搭建好的 Java 开源博客系统,如果你想开个独立博客,请一定不要错过!v2.9.7 加入了一款新皮肤 Jane:

案例

功能

  • Markdown / Emoji

  • 聚合分类 / 标签

  • 自定义导航(页面、链接)

  • 草稿夹

  • 评论/回复邮件提醒

  • 随机文章 / 相关文章 / 置顶 / 更新提醒

  • 自定义文章永久链接

  • 自定义站点 SEO 参数

  • 自定义公告 / 页脚

  • 多个签名档

  • 代码高亮 / 数学公式 / 流程图

  • 多皮肤,多端适配 / 社区皮肤

  • 多语言 / 国际化

  • 上传本地 / 七牛云

  • 友情链接管理

  • 多用户写作,团队博客

  • Hexo/Jekyll 导入

  • SQL / JSON / Markdown 导出

  • 插件系统

  • Atom / RSS 订阅

  • Sitemap

  • MetaWeblog API

  • CDN 静态资源分离

  • GitHub 集成

安装

  • 下载安装包

  • 解压后执行 java -cp "WEB-INF/lib/*;WEB-INF/classes" org.b3log.solo.Starter

从 2.9.6 升级只需将已有的配置拷贝覆盖即可,启动后会自动升级。升级前请备份数据库,以免出现意外!

文档

项目

2.9.6 变更记录

  • 12535 支持配置自定义模板变量

  • 12572 nijigen 皮肤继续优化

  • 12584 新皮肤 Jane

  • 12566 优先使用皮肤内的登录、报错等模板

  • 12583 调整列表分页 URL

  • 12587 缺失标签情况下也自动保存草稿

  • 12577 调整请求 URL 风格

  • 12578 重构邮件发送

  • 12579 定时任务重构

  • 12580 后台控制器使用函数式路由

  • 12585 测试覆盖率使用 JaCoCo

  • 12575 上传文件安全漏洞

历史版本变更请浏览这里

nt-addon-pay 0.3.2 发布,Nest 的聚合支付插件

$
0
0

Notadd 支付插件

整合微信支付API、支付宝支付API,基于 Nest.js 框架构建的一个支付插件。

功能更新

  • 新增微信现金红包支付

文档

  • 完善微信支付接口文档及使用说明

其他

  • 更新微信支付使用说明

 

使用说明

安装

npm install @notadd/addon-pay

配置 PayAddon

import { Module } from '@nestjs/common';
import { PayAddon } from '@notadd/addon-pay';

@Module({
  imports: [
    PayAddon.forRoot({
        wechatConfig: {
            appid: 'appid',     // 公众号appi/应用appid/小程序appid
            mch_id: 'mch_id',   // 商户号
            secretKey: 'secretKey', // 商户交易秘钥
            pfx: fs.readFileSync('path_to_p12_file'),   // p12文件
            sandbox: true   // 是否启用沙箱环境,默认不启用
        }
    })
  ]
})
export class ApplicationModule {}

使用 WechatXXXPayService

import { Injectable, Inject } from '@nestjs/common';
import { WechatNativePayService, WechatTradeType } from '@notadd/addon-pay';

@Injectable()
export class TestPay {
    constructor(@Inject(WechatNativePayService) private readonly wechatNativePayService: WechatNativePayService) { }

    async nativePay() {
        const ressult = await this.wechatNativePayService.pay({
            body: '支付一下',
            out_trade_no: '201811271512000001',
            total_fee: 301,
            spbill_create_ip: '127.0.0.1',
            notify_url: 'your.domain.com/wechat-pay/notify',
            trade_type: WechatTradeType.JSAPI
        });
    }
}

贡献说明

我们欢迎 Nest.js 使用者来参与这个插件的开发,作为一个贡献者,请您遵循以下原则:

  • 代码提交规范,参考 Git Commit Message Conventions

  • 始终从 develop checkout 一个新分支,命名规范为 feature/xxx,xxx 必须具有可读性,如:微信-普通商户版-扫码支付 => feature/wechat-native-pay

  • 在 checkout 新分支前,先在本地 develop 分支拉取远程 develop 分支的最新代码

  • 文件命名规则请参考项目目前的命名规则,如:微信支付中,order.interface.ts 代表所有订单相关的请求参数和返回结果的定义,swipe.pay.service.ts 代表付款码支付的业务逻辑

功能开发

请先查阅 Roadmap,确保你想贡献的功能没有正在被实现。然后在 issue 里提交一个贡献请求,注明想要贡献的功能。

发现 Bug ?

如果你在源码中发现bug,请你先在本仓库的 issue 提交一个bug问题。在你提交完bug问题后,我们很乐意接受你提交一个 PR来帮助我们修复这个bug。

Roadmap

  •  0.0.1 贡献说明

  •  0.1.0 微信-普通商户版-APP支付

  •  0.2.0 微信-普通商户版-JSAPI支付、微信-普通商户版-Native支付、微信-普通商户版-H5支付、微信-普通商户版-小程序支付

  •  0.3.0 微信-普通商户版-付款码支付

  •  0.4.0 支付宝-APP支付

  •  0.5.0 支付宝-当面付

  •  0.6.0 支付宝-手机网站支付

  •  0.7.0 支付宝-电脑网站支付

  •  1.0.0 完善使用说明、发布正式版v1.0.0

 

下载地址:

github: https://github.com/notadd/nt-addon-pay

码云: https://gitee.com/notadd/nt-addon-pay

Viewing all 44787 articles
Browse latest View live