我只想确保来自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]
。怎么了?
答案 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
]
]
}