Serob_b
Serob_b

Reputation: 1069

Validate JS Array request in Laravel Controller

I just want to ensure that my data, coming from a JS side, is an array. So from the accepted answer it is visible that writing 'array' in the validation would be enough. But in my case, when I write:

$request->validate([
    'tags' => 'array',
]);

and pass an array [1,2,3] using Postman, I get an error ["The tags must be an array."], and php handles it as a string, so when I try to get, for example, the first element $request->tags[0], I receive '['. What's wrong here?

Upvotes: 1

Views: 269

Answers (2)

Sumit Kumar
Sumit Kumar

Reputation: 1902

<form ..>
  <input name="tags[]" value="1">
  <input name="tags[]" value="2">
  <input name="tags[]" value="2">
</form>

<script>
 //your code to serialise and post form through JS goes here
</script>

In your request class

//TagsRequest.php
public function rules(){
  return [
    'tags'=>['array'],
    'tags.*'=>[
       //add rules for tags array elements
    ]
  ]

}

Upvotes: 0

user1669496
user1669496

Reputation: 33108

It appears as though when you pass [1,2,3], it's not an array, it's literally just a string. When you treat a string like an array in PHP, it will give you that character so $request->tags[0] is just giving you the first character in the string which is [.

When using postman and adding your key value pairs, set the keys and values like so...

+--------+-------+
| Key    | Value |
+--------+-------+
| tags[] | 1     |
| tags[] | 2     |
| tags[] | 3     |
+--------+-------+

Upvotes: 1

Related Questions