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?

2 Answers 2

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     |
+--------+-------+
Sign up to request clarification or add additional context in comments.

2 Comments

Is it a Postman-specific issue, or I have to do similar stuff in real JS also?
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.
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
    ]
  ]

}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.