Laravel 通过 ajax 进行数组验证:显示错误消息引发错误
Laravel array validation via ajax : showing error message throws error
正在尝试通过 FormRequest 验证来验证 laravel 中的数组
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class VendorStoreRoom extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'roomtype_id' => 'required',
'price' => 'required|digits_between:1,8',
'amenities' => 'required',
//'max_children' => 'required',
'max_adult' => 'required',
//'capacity' => 'required',
'floor.*' => 'required',
'room_count' => 'min:1|max:50',
'room_number.*' => 'required',
//'room_number' => 'required|max:5',
'image' => 'required',
];
}
public function messages()
{
return [
'roomtype_id.required' => 'Please select a room type',
'price.required' => 'Price cannot be empty',
'price.digits_between' => 'Price cannot exceed 8 digits',
'amenities.required' => 'Atleast select one amenities',
//'max_children.required' => 'Vendor name cannot be empty',
'max_adult.required' => 'Maximum adult can not be empty',
//'capacity.required' => 'Vendor name cannot be empty',
'floor.*.required' => 'Please select a floor',
'room_count.min' => 'Room count cannot be empty',
'room_count.max' => 'Room count cannot exceed 50',
'room_number.*.required' => 'Room number cannot be empty',
//'room_number.max' => 'Room number cannot exceed 5 characters',
'image.required' => 'Atleast select one image',
/*'image.*.mimes' => 'Image Must be JPEG, JPG or PNG',
'image.*.min' => 'Image size must be more than 10 kb',
'image.*.max' => 'Image size cannot exceed 300 mb', */
];
}
}
这是我得到的回复:
{"message":"The given data was invalid.","errors":{"roomtype_id":["Please select a room type"],"price":["Price cannot be empty"],"amenities":["Atleast select one amenities"],"image":["Atleast select one image"],"floor.0":["Please select a floor"],"room_number.0":["Room number cannot be empty"]}}
我在 jquery 中发现了这些错误,并按如下操作:
这很好用:$("#amenities_error").text(data.responseJSON.errors.amenities);
但不是这个:$("#floor_error").text(data.responseJSON.errors.floor.0);
我怎样才能做到这一点?
有什么我可以做的,比如 data.responseJSON.errors."floor.0" 或 data.responseJSON.errors.{floor.0}
floor.0
是导致此错误的关键字符串。但是,javascript 将 .
视为 属性 分隔符。因此,javascript 搜索具有 属性 0
的对象 floor
。
要解决此问题,您必须为此键使用数组语法。
$("#floor_error").text(data.responseJSON.errors["floor.0"]);
正在尝试通过 FormRequest 验证来验证 laravel 中的数组
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class VendorStoreRoom extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'roomtype_id' => 'required',
'price' => 'required|digits_between:1,8',
'amenities' => 'required',
//'max_children' => 'required',
'max_adult' => 'required',
//'capacity' => 'required',
'floor.*' => 'required',
'room_count' => 'min:1|max:50',
'room_number.*' => 'required',
//'room_number' => 'required|max:5',
'image' => 'required',
];
}
public function messages()
{
return [
'roomtype_id.required' => 'Please select a room type',
'price.required' => 'Price cannot be empty',
'price.digits_between' => 'Price cannot exceed 8 digits',
'amenities.required' => 'Atleast select one amenities',
//'max_children.required' => 'Vendor name cannot be empty',
'max_adult.required' => 'Maximum adult can not be empty',
//'capacity.required' => 'Vendor name cannot be empty',
'floor.*.required' => 'Please select a floor',
'room_count.min' => 'Room count cannot be empty',
'room_count.max' => 'Room count cannot exceed 50',
'room_number.*.required' => 'Room number cannot be empty',
//'room_number.max' => 'Room number cannot exceed 5 characters',
'image.required' => 'Atleast select one image',
/*'image.*.mimes' => 'Image Must be JPEG, JPG or PNG',
'image.*.min' => 'Image size must be more than 10 kb',
'image.*.max' => 'Image size cannot exceed 300 mb', */
];
}
}
这是我得到的回复:
{"message":"The given data was invalid.","errors":{"roomtype_id":["Please select a room type"],"price":["Price cannot be empty"],"amenities":["Atleast select one amenities"],"image":["Atleast select one image"],"floor.0":["Please select a floor"],"room_number.0":["Room number cannot be empty"]}}
我在 jquery 中发现了这些错误,并按如下操作:
这很好用:$("#amenities_error").text(data.responseJSON.errors.amenities);
但不是这个:$("#floor_error").text(data.responseJSON.errors.floor.0);
我怎样才能做到这一点?
有什么我可以做的,比如 data.responseJSON.errors."floor.0" 或 data.responseJSON.errors.{floor.0}
floor.0
是导致此错误的关键字符串。但是,javascript 将 .
视为 属性 分隔符。因此,javascript 搜索具有 属性 0
的对象 floor
。
要解决此问题,您必须为此键使用数组语法。
$("#floor_error").text(data.responseJSON.errors["floor.0"]);