VaporExt 是一个 Swift 扩展的集合,为各种 Vapor 类型和类提供了便捷的方法、语法糖和性能改进。
您可以使用 Swift Package Manager 安装 VaporExt
,只需将正确的描述添加到您的 Package.swift
文件中
import PackageDescription
let package = Package(
name: "YOUR_PROJECT_NAME",
targets: [],
dependencies: [
.package(url: "https://github.com/vapor-community/vapor-ext.git", from: "0.1.0"),
]
)
请注意,Swift Package Manager 仍处于早期设计和开发阶段,有关更多信息,请查看其 GitHub 页面
这些扩展分为 3 个模块:AsyncExt
、FluentExt
和 ServiceExt
,以及 VaporExt
,它作为一个辅助工具来导出前面包中包含的扩展。
true(or error:)
false(or error:)
greater(than value:)
greater(than value:, or error:)
greaterOrEqual(to value:)
greaterOrEqual(to value:, or error:)
less(than value:)
less(than value:, or error:)
lessOrEqual(to value:)
lessOrEqual(to value:, or error:)
equal(to value:)
equal(to value:, or error:)
notEqual(to value:)
notEqual(to value:, or error:)
query(by:, on:, withSoftDeleted:)
创建模型的查询并应用筛选条件。findAll(sortBy:, on:, withSoftDeleted:)
查找所有模型并应用一些排序条件。find(by:, sortBy:, on:, withSoftDeleted:)
查找模型并应用一些筛选和排序条件。findOne(by:, on:, withSoftDeleted:)
查找与筛选条件匹配的第一个模型。count(on:, withSoftDeleted:)
统计模型注册的数量。count(by:, on:, withSoftDeleted:)
统计与某些条件匹配的模型的注册数量。!~=
用于不包含后缀的比较。!=~
用于不包含前缀的比较。!~~
用于不包含的比较。filter(keyPath:, at parameter:, on req:)
处理基于查询参数的自动筛选。sort(keyPath:, at queryParam:, as parameter:, default direction:, on req:)
处理基于查询参数的自动排序。sort(keyPath:, as parameter:, default direction:, on req:)
处理基于查询参数的自动排序。sort(by:)
应用一些排序条件。filter(keyPath:, at parameter:)
基于查询参数构建 FilterOperator。sort(keyPath:, at queryParam:, as parameter:)
基于查询参数构建 QuerySort。sort(keyPath:, at queryParam:, as parameter:, default direction:)
基于查询参数构建 QuerySort。sort(keyPath:, as parameter:)
基于查询参数构建 QuerySort。sort(keyPath:, as parameter:, default direction:)
基于查询参数构建 QuerySort。您可以使用以下格式设置筛选方法:parameter=method:value
,新的筛选方法将基于 method
构建筛选器,例如
username=example@domain.com
或 username=eq:example@domain.com
将使用 equal
比较。username=neq:example@domain.com
将使用 not equal
比较。username=in:example@domain.com,other@domain.com
将使用 in
比较。username=nin:example@domain.com,other@domain.com
将使用 not in
比较。price=gt:3000
将使用 greater than
比较。price=gte:3000
将使用 greater than or equal
比较。price=lt:3000
将使用 less than
比较。price=lte:3000
将使用 less than or equal
比较。username=sw:example
将使用 starts with
比较进行筛选。username=nsw:example
将使用 not starts with
比较进行筛选。username=ew:domain.com
将使用 ends with
比较进行筛选。username=new:domain.com
将使用 not ends with
比较进行筛选。username=ct:domain.com
将使用 contains
比较进行筛选。username=nct:domain.com
将使用 not contains
比较进行筛选。return try User.query(on: req)
.filter(\User.username, at: "username", on: req)
.filter(\User.enabled, at: "enabled", on: req)
.filter(\User.createdAt, at: "created_at", on: req)
.filter(\User.updatedAt, at: "updated_at", on: req)
.filter(\User.deletedAt, at: "deleted_at", on: req)
您可以使用以下格式设置排序方法:sort=field:direction,field:direction
,新的排序方法将基于该配置构建查询,例如
sort=username:asc,created_at:desc
,您可以按 username 以 ASC 方向和 firstname 以 DESC 方向对用户进行排序return try User.query(on: req)
.sort(\User.username, as: "username", on: req)
.sort(\User.createdAt, as: "created_at", default: .ascending, on: req) // if created_at is not present in the url, then the sort is applied using the default direction
func index(_ req: Request) throws -> Future<[User]> {
let repository = try req.make(UserRepository.self)
let criteria: [FilterOperator<User.Database, User>] = try [
req.filter(\User.name, at: "name"),
req.filter(\User.username, at: "username"),
req.filter(\User.enabled, at: "enabled")
].compactMap { $0 }
var sort: [User.Database.QuerySort] = try [
req.sort(\User.name, as: "name"),
req.sort(\User.username, as: "username"),
req.sort(\User.createdAt, as: "created_at"),
].compactMap { $0 }
if sort.isEmpty {
let defaultSort = try req.sort(\User.name, as: "name", default: .ascending)
sort.append(defaultSort)
}
return repository.findBy(criteria: criteria, orderBy: sort, on: req)
}
dotenv(filename:)
方法来添加 .env
支持!get(_ key:)
方法来获取 Int 和 Bool 类型的值get(_ key:, _ fallback:)
方法来获取 Int、Bool 和 String 类型的值,并提供回退值toResponse(on req:, as status:, contentType:)
方法将 Future 转换为 Future我们希望收到您的反馈。请在参与之前参阅贡献指南。
与使用 VaporExt 的其他人交流经验总是很棒的,所以快来加入我们的 Discord 频道。
此包由 Gustavo Perdomo 开发和维护,并得到了所有 Vapor 社区的协作。
VaporExt 在 MIT 许可下发布。 有关更多信息,请参见license。