[英]Converting Laravel validation message dot syntax into array
我在服務器端使用 Laravel。 假設我們的控制器接收到兩個字段url
[string] 和data
[array with index 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"]
}
}
在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
}
Laravel 有一個名為array_set的助手,可以將基於點的符號轉換為數組。
我不知道你是如何通過 ajax 發送錯誤的,但你應該可以這樣做:
$errors = [];
foreach ($validator->errors()->all() as $key => $value) {
array_set($errors, $key, $value);
}
編輯:但顯然,您應該無法通過 在語言文件中指定自定義消息來使用點符號,如下例所示:
'custom' => [
'email' => [
'required' => 'We need to know your e-mail address!',
],
],
我不知道這是否仍然是一個有效問題,但要在 laravel 中使用點符號創建自定義驗證,您可以在 validation.php 中指定這樣的數組
'custom' => [
'parent' => [
'children' => [
'required' => 'custom message here'
]
]
這將是parent.children屬性。
再見。
key = key.replace(/\./g, '[') + Array(key.split('.').length).join(']');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.