Cakephp _serialize - 如何将多个模型错误消息转换为简单的JSON数组?

时间:2014-07-02 20:09:18

标签: php arrays json cakephp flatten

我使用CakePHP _serialize函数来响应API响应。

如果在模型上有一些验证错误,则返回消息,该消息描述JSON输出中的错误。

代码是这样的:

$status = 'NOK';
            $errors = $this->User->validationErrors;
            // SET RESPONSE TO OUTPUT
            $this->set(array(
                'status' => $status,
                'message' => $errors,
                '_serialize' => array('status','message')
            ));

它生成此JSON:

{
"status": "NOK",
"message": {
    "email": [
        "Email already exists"
    ],
    "username": [
        "Username already exists"
    ]
}

}

问题是,消息应该是带有错误字符串的简单数组(因为用户无法通过键名访问错误),这意味着,如下所示:

   {
    "status": "NOK",
    "message": [
            "Email already exists",
            "Username already exists"
        ]
    }

问题是:

如何在CakePHP或纯PHP中简单解决这个问题?

感谢您提供任何帮助或建议。

2 个答案:

答案 0 :(得分:1)

使用array_values

$this->set(array(
    'status' => $status,
    'message' => array_values($errors),
    '_serialize' => array('status','message')
));

答案 1 :(得分:0)

尝试使用Hash::extract

$errors = Hash::extract($this->User->validationErrors, '{s}.{n}');

提供以下JSON:

["Email already exists", "Username already exists"]