Vapor Version MIT License Continuous Integration Swift 4.1

VaporExt

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 个模块:AsyncExtFluentExtServiceExt,以及 VaporExt,它作为一个辅助工具来导出前面包中包含的扩展。

AsyncExt

FluentExt

用于筛选器的查询参数语法

您可以使用以下格式设置筛选方法:parameter=method:value,新的筛选方法将基于 method 构建筛选器,例如

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,新的排序方法将基于该配置构建查询,例如

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

Request 扩展示例

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)
}

ServiceExt

VaporExt

参与其中

我们希望收到您的反馈。请在参与之前参阅贡献指南

Discord 频道

与使用 VaporExt 的其他人交流经验总是很棒的,所以快来加入我们的 Discord 频道

致谢

此包由 Gustavo Perdomo 开发和维护,并得到了所有 Vapor 社区的协作。

许可

VaporExt 在 MIT 许可下发布。 有关更多信息,请参见license