gpt4 book ai didi

cakephp - 如何在 CakePHP 中将验证错误字段名称转换为输入名称?

转载 作者:行者123 更新时间:2023-12-04 05:32:21 25 4
gpt4 key购买 nike

我有一个 CakePHP(最新版本)Web 应用程序,其中的表单和验证都可以使用传统的回发正常工作,但现在我将一些表单切换为通过 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 对象。所以我目前在我的 Controller 中这样做:
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 通常会处理这些格式。

在我返回数组之前,是否有一些简单的方法可以调整它?我不想简单地循环并添加“data[User]”,因为这不够健壮。我想要一些代码,我可以放在一个地方并从各种 Controller 调用各种模型。 FormHelper 使用什么来提供输入名称属性?我可以利用它吗?我应该以某种方式使用 JSON View 吗?

最佳答案

那是因为这就是 $validationErrors 的方式数组被格式化。要获得您想要的输出,您必须循环遍历,没有办法绕过它。

foreach ($this->User->validationErrors as $field => $error) {
$this->User->validationErrors["data[User][$field]"] = $error;
unset($this->User->validationErrors[$field]);
}

我建议改为将所有错误传递给 json_encode() . $this->validationErrors是 View 上可用的该请求的所有模型验证错误的组合列表(在渲染后编译)。您应该将您的显示逻辑(回显 json)移动到您的 View 中,并在那里循环遍历它。

在 View 中
$errors = array();
foreach ($this->validationErrors as $model => $modelErrors) {
foreach ($modelErrors as $field => $error) {
$errors["data[$model][$field]"] = $error;
}
}
$response['errors'] = $errors;
echo json_encode($response);

这将输出如下内容:
{
"success":false,
"errors": [
"data[User][username]": "This is not a valid e-mail address",
"data[User][password]": "This is not a valid password",
"data[Profile][name]": "Please fill in the field"
]
}

关于cakephp - 如何在 CakePHP 中将验证错误字段名称转换为输入名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12413988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com