我在服务器端使用Laravel。让我们假设我们的控制器收到两个字段url
[string]和data
[索引为head
的数组]。我们可以使用
$this->validate($request, [
'url' => 'required',
'data.head' => 'required',
], [
'url.required' => 'The :attribute field is required',
'data.head.required' => 'The :attribute field is required',
]);
如果验证失败,Laravel将使用json数据发回回复
{
"url": ["The url field is required"],
"data.head": ["The data.head field is required"]
}
我们如何将响应数据转换为发送json,如下所示?
{
"url": ["The url field is required"],
"data": {
"head": ["The data.head field is required"]
}
}
答案 0 :(得分:1)
Laravel有一个名为array_set的助手,它将基于点的表示法转换为数组。
我不知道你是如何通过ajax发送错误的,但你应该能够做到这样的事情:
$errors = [];
foreach ($validator->errors()->all() as $key => $value) {
array_set($errors, $key, $value);
}
编辑: 但显然,您应该不能像Specifying Custom Messages In Language Files那样使用点符号,例如:
'custom' => [
'email' => [
'required' => 'We need to know your e-mail address!',
],
],
答案 1 :(得分:0)
在javascript中
循环错误
error: function (errors) {
$.each(errors['responseJSON']['errors'], function (index, error) {
var object = {};
element = dotToArray(index);
object[index] = error[0];
validator.showErrors(object);
});
}
将点表示法转换为数组表示法。即 abc.1.xyz到abc [1] [xyz]
function dotToArray(str) {
var output = '';
var chucks = str.split('.');
if(chucks.length > 1){
for(i = 0; i < chucks.length; i++){
if(i == 0){
output = chucks[i];
}else{
output += '['+chucks[i]+']';
}
}
}else{
output = chucks[0];
}
return output
}
答案 2 :(得分:0)
key = key.replace(/\./g, '[') + Array(key.split('.').length).join(']');