通过ajax进行Laravel数组验证:显示错误消息抛出错误

时间:2017-12-08 07:36:12

标签: javascript php jquery javascript-objects laravel-5.5

尝试通过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}

1 个答案:

答案 0 :(得分:1)

floor.0是此错误的关键字符串。但是,javascript会将.视为属性分隔符。因此,javascript会搜索具有属性floor的对象0 要解决此问题,您必须使用此密钥的数组语法。

$("#floor_error").text(data.responseJSON.errors["floor.0"]);