【发布时间】:2012-09-13 20:06:15
【问题描述】:
我有一个带有表单和验证的 CakePHP(最新版本)网络应用程序,所有这些都使用传统的回发正常工作,但现在我正在切换一些表单以通过 ajax 提交。当出现验证错误时,我希望将它们以 JSON 格式返回到客户端,如下所示:
{
"success":false,
"errors":{
"data[User][username]":["This is not a valid e-mail address"],
"data[User][password]":["You must choose a password"]
}}
errors 数组的键需要与表单字段上的 name 属性相对应。我们有一些预构建的客户端脚本,期望以这种方式格式化 JSON。好消息是这非常接近于 CakePHP 中的 validationErrors 对象。所以我目前正在我的控制器中执行此操作:
if ($this->User->save($this->request->data)) {
} else {
if ($this->request->is('ajax')) {
$this->autoRender = $this->layout = false;
$response['success'] = false;
$response['errors'] = $this->User->validationErrors;
echo json_encode($response);
exit(0);
}
}
然而,这就是 JSON 响应的样子:
{
"success":false,
"errors":{
"username":["This is not a valid e-mail address"],
"password":["You must choose a password"]
}}
请注意,错误键中只有基本的数据库表字段名称。它们不会转换为 Data[User][username] 格式,FormHelper 通常会处理这些格式。 p>
有没有一些简单的方法可以在我返回之前调整数组?我不想简单地循环并预先添加“data [User]”,因为这不够健壮。我想要一些可以放在一个地方并从各种控制器调用各种模型的代码。 FormHelper 使用什么来提供输入名称属性?我可以利用它吗?我应该以某种方式使用 JSON 视图吗?
【问题讨论】:
标签: cakephp