1

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?

Serob_b
  • 965
  • 12
  • 29

2 Answers2

1

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     |
+--------+-------+
user1669496
  • 32,176
  • 9
  • 73
  • 65
  • Is it a Postman-specific issue, or I have to do similar stuff in real JS also? – Serob_b Sep 20 '18 at 18:09
  • 2
    I wouldn't call it a Postman issue. It's just how PHP expects the query strings to be formatted when using arrays. ex `test.php?tags=[1,2,3]` PHP would determine tags to be a string. `test.php?tags[]=1&tags[]=2&tags[]=3` PHP would determine to be an array. If you are using JS, depending on how you do it, there's a good chance that will be handled for you. – user1669496 Sep 20 '18 at 18:15
0
<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
    ]
  ]

}
Sumit Kumar
  • 1,855
  • 19
  • 19