在Laravel Controller中验证JS Array请求

时间:2018-09-20 17:16:26

标签: php arrays laravel validation controller

我只想确保来自JS端的数据是一个数组。因此从the accepted answer可以看出,在验证中编写class User < ApplicationRecord validate :validate_amount def validate_amount if admin? && amount > 100 || cs? && amount > 25 || staff? && amount > 15 errors.add(:amount, "is too big") end end end 就足够了。但就我而言,当我写:

'array'

并使用Postman传递数组$request->validate([ 'tags' => 'array', ]); ,我得到一个错误[1,2,3],而php将其作为字符串处理,因此当我尝试获取第一个元素时["The tags must be an array."],我收到$request->tags[0]。怎么了?

2 个答案:

答案 0 :(得分:0)

当您传递[1,2,3]时,它似乎不是一个数组,实际上是一个字符串。当您将字符串像PHP中的数组一样对待时,它将给您该字符,因此$request->tags[0]只是给您字符串中的第一个字符,即[

使用邮递员并添加键值对时,请像这样设置键和值...

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

答案 1 :(得分: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>

在您的请求类中

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

}