gpt4 book ai didi

swift - Vapor 3 - 如何从 Leaf 模板表单填充模型的数组属性

转载 作者:行者123 更新时间:2023-11-28 07:23:51 24 4
gpt4 key购买 nike

我有一个GroupUser 和一个App 模型。在我的组模型中,我有一个属性 var apps: [App] 并且我创建了组和用户的兄弟关系。

在我的 WebsiteController 中,我有 2 个处理程序:

  1. createGroupHandler 处理 /groups/createGET 请求
  2. createGroupPostHandler 处理 /groups/create 上的 POST 请求

我的问题是,在我的 createGroup.leaf 模板中选择表单中的应用程序对象后,当我创建新组时,没有应用程序被填充到我的应用程序数组中。

我创建了结构来表示在我的 createGroupHandler 中呈现的上下文,并处理在 createGroupPostHandler 的发布请求中传递的数据

struct CreateGroupContext: Encodable {
let title = "Create Group"
let users: Future<[User]>
let apps: Future<[App]>
}

struct CreateGroupData: Content {
let name: String
let apps: [App]
let users: [String]?
}

应用程序已正确加载到表单中,但尽管如下图所示选择了它们,但它们并未添加到数组中 enter image description here

我的 createGroupPostHandler 如下所示。 我不知道如何获取选定的应用程序并填充我的 apps: [App] 数组是我的问题,我觉得这是我的问题应该这样做,但我不知道如何从 Leaf 模板中获取它。

func createGroupPostHandler(_ req: Request, data: CreateGroupData) throws -> Future<Response> {
let group = Group(name: data.name, apps: data.apps)
return group.save(on: req).flatMap(to: Response.self) { group in
guard let id = group.id else {
throw Abort(.internalServerError)
}

var userSaves: [Future<Void>] = []
for user in data.users ?? [] {
try userSaves.append(User.addUser(user, to: group, on: req))
}

let redirect = req.redirect(to: "/groups/\(id)")
return userSaves.flatten(on: req).transform(to: redirect)
}
}

这就是我的 createGroup.leaf 的样子:enter image description here

最佳答案

我在HTML中使用索引符号命名input标签,比如score[0], score[1]等。 Vapor然后很乐意解析它并创建一个字典(好吧,技术上不是数组!)。

在 Leaf 文件中使用这个符号:

#for(result in results) {
<input type="text" name="score[#(index)]" value="#(result.score)">
}

Controller 函数:

struct SaveResult:Content
{
var score:[Int:String]
}

func saveRoll(_ request:Request) throws -> Future<View>
{
return try request.content.decode(SaveResult.self).flatMap
{
result in
for i in 0...(result.score.count) - 1
{
print( detail.score[i] )
}
return try self.index(request)
}
}

关于swift - Vapor 3 - 如何从 Leaf 模板表单填充模型的数组属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57211288/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com