Veljko Stefanovic
Veljko Stefanovic

Reputation: 511

Array element validation doesn't pass even when it should

I have a trouble validating an array members in validation for Laravel. For array itself it passes, but for elements themselves, it fails.

Open json in console, shows structure of data being sent. It's clearly a integer. Since it's associative array, not sure how it even finds it's value as show in error handling red rectangle on the bottom of the page. Open json show structure of data being sent

Here is my validation logic:

$validation = Validator::make(
            $request->all(),
            [
                'load_place' => 'required|max:255',
                "unload_place" => 'required|max:255',
                "comment" => 'required|max:255',
                'time_in' => 'required',
                'time_out' => 'required',
                "vehicles" => 'required|array',
                "vehicles.*" => "required|integer",
                'operator_id' => 'required|integer',
                'sec_id' => 'required|integer'
            ]
        );

And here is how it's returned:

    if($validation->fails()){
    
                    $response = array(
                        "message" => "Failed",
                        "errors" => $errors,
                        "test" => $request->vehicles[0]
                    );
                    return response()->json($response);
    
                }

That request[0], is that number at the bottom.

Edit1:

Keys in that marked array, are set on frontend, they are not not predefined. They can be whatever.

Upvotes: 0

Views: 25

Answers (1)

Donkarnash
Donkarnash

Reputation: 12835

Change "vehicles.*" => "required|integer", to "vehicles.*.vehicle_id" => "required|integer", and it should work.

Keys is set on frontend, they are not not predefined. That what i am trying to say.

Try to replace "vehicles.*" => "required|integer", with new Rule::forEach rule for nested array data - guess it should work.

"vehicles.*" => Rule::forEach(function($value, $attribute) {
    return [
        Rule::integer()->min(1)   //min(1) as eg if it's for an id field which cannot be 0
    ];
}),

Upvotes: 1

Related Questions