Laravel 数组验证无法正常工作

6

我为输入字段使用以下命名约定。

course_details[0][d_Total_Score]
course_details[1][d_Total_Score]
course_details[2][d_Total_Score]

现在我想使用一些规则来验证这些字段。以下是我尝试的代码。

$validatedData = $request->validate([
    'course_details.0.d_Total_Score' => 'required',
    'course_details.1.d_Total_Score' => 'required',
    'course_details.2.d_Total_Score' => 'required'
]);

我参考了这里的内容。

但是似乎并没有起作用。

HTML代码:

<input placeholder="SAT score " class="form-control form-control-sm valid" id="d_Score_Sub_Category_SAT" name="course_details[0][d_Total_Score]" value="" aria-invalid="false" type="text">

问题已解决:正如d3jn所说,验证应该不会覆盖任何地方。


1
首先,您可以使用通配符语法,并让Laravel通过一个规则迭代您的corse_details'course_details.*.d_Total_Score' => 'required'。更多信息请参见此处。同时,请提供您在哪里使用这些规则的代码 - 在FormRequest类中?使用Validator?是否有任何异常?我们需要更多信息。 - d3jn
@d3jn,请检查更新。 - Dushyant Joshi
当您发送请求时,请检查dd($request->input('course_details'))。我假设“这似乎不起作用”意味着即使没有指定d_Total_Score,您也没有收到任何错误。或者相反,您总是收到验证错误? - d3jn
请提供您的表单输入的HTML代码。您的输入名称可能不正确。它们应该类似于 <input name="course_details[0][d_Total_Score]" ...>,以匹配您提供的验证结构。 - d3jn
1
根据 dd($request->input('course_details')) 显示的内容,可能存在其他带有 name="course_details[d_Total_Score]" 的输入项,这些输入项位于您原始输入之后,并覆盖了请求中发送的值。 - d3jn
显示剩余3条评论
1个回答

3
您可以通过以下方式实现您想要的目标:
course_details.*.d_Total_Score' => 'required'

我最近写了类似的东西,我是这样做的:
'contacts.*.name' => 'nullable|string|max:255',
'contacts.*.email' => 'nullable|email|max:255',
'contacts.*.phone' => 'nullable|phone:US|max:255',

我的HTML代码如下:

<input class="form-control{{ $errors->has('contacts') ? ' is-invalid' : '' }}" id="contacts" name="contacts[0][name]" type="text" value="">
<input class="form-control{{ $errors->has('contacts') ? ' is-invalid' : '' }}" id="contacts" name="contacts[0][email]" type="text" value="">
<input class="form-control{{ $errors->has('contacts') ? ' is-invalid' : '' }}" id="contacts" name="contacts[0][phone]" type="text" value="">

<input class="form-control{{ $errors->has('contacts') ? ' is-invalid' : '' }}" id="contacts" name="contacts[1][name]" type="text" value="">
<input class="form-control{{ $errors->has('contacts') ? ' is-invalid' : '' }}" id="contacts" name="contacts[1][email]" type="text" value="">
<input class="form-control{{ $errors->has('contacts') ? ' is-invalid' : '' }}" id="contacts" name="contacts[2][name]" type="text" value="">

... so on


当你说它不起作用时,是指它通过了验证还是出现了错误?@DushyantJoshi - Kevin Pimentel
2
它正在通过验证。这意味着它没有被调用。 - Dushyant Joshi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接