如何将验证错误从 php 返回到 swift 或 segue 成功
Posted
技术标签:
【中文标题】如何将验证错误从 php 返回到 swift 或 segue 成功【英文标题】:How to return validation errors back to swift from php or segue on success 【发布时间】:2018-11-19 11:26:05 【问题描述】:我正在使用 alamofire 将数据发布到 php 脚本,该脚本将数据插入 mysql 数据库。这部分工作正常,但我在服务器上进行了一些验证,例如检查有效的电子邮件地址。所以,这里是快速代码:
Alamofire.request(url!, method: .post, parameters: parameters)
.validate(statusCode: 200..<300)
.responseJSON response in
switch response.result
case .success:
print(response)
case .failure(let error):
print(error)
这是处理插入的 php。
if($booking->create($conn))
$response['status'] = "200";
$response['message'] = "Success";
else
$response['status'] = "400";
$response['message'] = $booking->errors;
echo json_encode($response);
在 swift 中,控制台中验证失败的响应是:
SUCCESS:
message = (
"Invalid email address",
"Contact number required"
);
status = 400;
如果没有错误,我实际上想转到另一个视图控制器,如果有错误,我可能想在标签中显示它们。
但是,最初我只想说是否有任何错误,打印它们,如果没有错误,然后继续。但是,如果我尝试将 if 语句放入响应中,则会出现错误。
case .success:
if response == "200"
// segue
二元运算符“==”不能应用于类型的操作数 “数据响应”和“字符串”
【问题讨论】:
如果请求格式错误,您的后端不应返回成功的 HTTP 响应代码。在这种特殊情况下,当请求格式错误时,它应该返回 400。此外,===
是引用相等运算符,==
是相等运算符。
@DávidPásztor,编辑了我的问题。现在不确定是否正确
【参考方案1】:
我希望有人能告诉我一个更好的方法来做到这一点,但我已经取得了一些进展并且它正在发挥作用。我对 Alamofire 文档的理解是,如果您收到响应,则意味着无论您的服务器发回什么,它都将始终是 200 响应。因此,我可以解决这个问题的唯一方法是使用可编码将响应解析为 json,然后根据该数据执行某些操作,如下所示:
Alamofire.request(url!, method: .post, parameters: parameters)
.responseJSON response in
let data = response.data
let jsonDecoder = JSONDecoder()
do
let serverResponse = try jsonDecoder.decode(PhpResponse.self, from: data!)
if serverResponse.status == "200"
print("Success")
else
print(serverResponse.message)
catch
debugPrint(error.localizedDescription)
所以,我将数据从 swift 发布到服务器,使用 php 进行一些表单验证,然后使用 php 的 json_encode,我将其以 json 格式发送回 swift,并根据该响应执行一些操作。
【讨论】:
以上是关于如何将验证错误从 php 返回到 swift 或 segue 成功的主要内容,如果未能解决你的问题,请参考以下文章