如何将验证错误从 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 成功的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 JSON 将数组从 php 解压到 Swift

在使用 Swift 的应用程序收据验证中返回代码 21002

如何检查网页是不是存在。 jQuery 和/或 PHP

使用 javascript 到 php 的表单验证

如何使用 Swift 泛型处理成功和错误 API 响应?

(iOS Swift) 从 Core Data 获取记录返回致命错误或 nil