如何解决Laravel 8 验证“需要”与文档不一致
我一直在检查所有相关规则一个小时:
这是我的验证规则请求:
class CreateRewardRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public static function rules()
{
return [
'parameters.name' => ['required','string','min:1'],'parameters.maxQty' => ['required','integer','parameters.maxPerUser' => ['nullable','parameters.maxPerDay' => ['nullable','parameters.pickWeight' => ['required',];
}
}
这是我的测试请求:
parameters[name]: null
parameters[maxQty]: null
parameters[maxPerUser]: null
parameters[maxPerDay]: null
parameters[pickWeight]: null
错误响应:
{
"message":"The given data was invalid.","errors":{
"parameters.maxQty":["The parameters.max qty must be an integer."],"parameters.pickWeight":["The parameters.pick weight must be an integer."],}
}
错误中甚至没有提到 parameters.name
字段,但文档说:
The field under validation must be present in the input data and not empty.
A field is considered "empty" if one of the following conditions are true:
The value is null.
The value is an empty string.
我想拒绝该字段的 NULL 值,因为它是“必需的”,但它似乎不起作用。
如果我不发送字段,我确实会显示验证错误,但我不希望空/空值通过验证。
我错过了什么吗?
谢谢!
PS:这是 VueJS 代码,以防我的表单提交可能是罪魁祸首:
let formData = new FormData();
for (let param in this.parameters) {
if (this.parameters.hasOwnProperty(param)) {
formData.append('parameters[' + param + ']',this.parameters[param]);
}
}
axios.post("/api/JdCode",formData).then(response => {
console.log(response);
});
编辑: 使用 dd($request->all())
,我注意到所有 null
FormData 值都被视为 string "null"
,这就是 required
规则不t 在 name
字段上工作,并且 maxQty
和 pickWeight
required
规则不会触发任何错误,但 integer
会触发 must be an integer
错误,因为它收到一个“空”字符串。
不确定我是否清楚,但它看起来像是与使用 Content-Type: multipart/form-data
发送的请求相关的错误。
有什么见解吗?
解决方法
也许添加 'present','not_in:null' 或 Rule::requiredIf(true),
public static function rules()
{
return [
'parameters.name' => ['required','string','min:1','not_in:null'],'parameters.maxQty' => ['required','integer','present'],'parameters.maxPerUser' => ['nullable','min:1'],'parameters.maxPerDay' => ['nullable','parameters.pickWeight' => ['required',];
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。