【问题标题】:How to return validation errors back to swift from php or segue on success如何将验证错误从 php 返回到 swift 或 segue 成功
【发布时间】: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,编辑了我的问题。现在不确定是否正确

标签: php swift alamofire


【解决方案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,并根据该响应执行一些操作。

【讨论】:

    猜你喜欢
    • 2020-09-12
    • 1970-01-01
    • 2012-09-06
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    相关资源
    最近更新 更多