Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Validate array of inputs in form in Laravel 5.7

My form has the same input field multiple times. My form field is as follows:

<input type='text' name='items[]'>
<input type='text' name='items[]'>
<input type='text' name='items[]'>

And request contains ($request['items'):

array:1 [▼
  "items" => array:3 [▼
    0 => "item one"
    1 => "item two"
    2 => "item three"
  ]
]

I want atleast one of the items to be filled. My current validation in the controller is

    $validator = Validator::make($request->all(),[
        'items.*' => 'required|array|size:1'
    ]);

It does not work. I tried with combination of size, required, nullable. Nothing works.

like image 601
Dilani Avatar asked Sep 19 '18 11:09

Dilani


2 Answers

In fact, it's enough to use:

$validator = Validator::make($request->all(),[
        'items' => 'required|array'
    ]);

The changes made:

  • use items instead of items.* - you want to set rule of general items, if you use items.* it means you apply rule to each sent element of array separately
  • removed size:1 because it would mean you want to have exactly one element sent (and you want at least one). You don't need it at all because you have required rule. You can read documentation for required rule and you can read in there that empty array would case that required rule will fail, so this required rule for array makes that array should have at least 1 element, so you don't need min:1 or size:1 at all
like image 83
Marcin Nabiałek Avatar answered Oct 24 '22 14:10

Marcin Nabiałek


You can check it like this:

$validator = Validator::make($request->all(), [
    "items"    => "required|array|min:1",
    "items.*"  => "required|string|distinct|min:1",
]);

In the example above:

  • "items" must be an array with at least 1 elements.
  • Values in the "items" array must be distinct (unique) strings, at least 1 characters long.
like image 33
Exterminator Avatar answered Oct 24 '22 12:10

Exterminator