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。