如何验证 Laravel 表单中未知数量的字段
How to validate an unknown number of fields in a Laravel form
我正在使用 Laravel 5.4,并且有一个表格,其中填充了来自数据库的问题,每个问题都需要 'score' 使用单选按钮,值从 1 到 10。我需要容纳一个未知数量的问题,我需要验证以测试是否所有问题都选择了分数。所有单选按钮组都被命名为 q_ 后跟 question_id(例如 q_1、q_2 等)。我想这一切都可以手动完成,但 Laravel 是一个如此强大的框架,我不得不认为有一种 "Laravel" 方法可以做到这一点。有人有什么建议吗?
您可以使用 php 和 laravel 来处理这个问题。假设您通过数组中的查询获得所有问题 ID。
$questionIds = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
然后创建一个空数组来创建规则。
$validatedQuestionIds = [];
现在为每个问题 ID 添加规则
foreach($questionIds as $key => $questionId){
$validatedQuestionIds = [
'q_'.$questionId = 'required|string';
];
}
现在使用 laravel 验证函数验证数组。
$request->validate($validatedQuestionIds);
我建议您避免给它们添加前缀名称,并使用类似以下内容创建一个实际的数组;
<input type="checkbox" name="question[{{ $question->id }}]" ...>
现在在你的控制器方法中你可以这样做了;
$questions = $request->input('questions');
您的验证器规则可能如下所示;
$request->validate([
'questions.*' => ['required', 'string']
]);
Laravel 允许您以多种方式验证数组,check out the documentation.
如果您真的想使用前缀,可以考虑构建一个 custom validation rule。但我同意 ollieread 的观点,您可能应该将所有问题作为数组元素来处理。为了稍微扩展一下这个答案,这些规则是这样的:
$rules = [
'questions' => 'array',
'questions.*.text' => 'required_with:questions|string',
'questions.*.score' => 'required_with:questions|integer|min:1|max:10'
];
我正在使用 Laravel 5.4,并且有一个表格,其中填充了来自数据库的问题,每个问题都需要 'score' 使用单选按钮,值从 1 到 10。我需要容纳一个未知数量的问题,我需要验证以测试是否所有问题都选择了分数。所有单选按钮组都被命名为 q_ 后跟 question_id(例如 q_1、q_2 等)。我想这一切都可以手动完成,但 Laravel 是一个如此强大的框架,我不得不认为有一种 "Laravel" 方法可以做到这一点。有人有什么建议吗?
您可以使用 php 和 laravel 来处理这个问题。假设您通过数组中的查询获得所有问题 ID。
$questionIds = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
然后创建一个空数组来创建规则。
$validatedQuestionIds = [];
现在为每个问题 ID 添加规则
foreach($questionIds as $key => $questionId){
$validatedQuestionIds = [
'q_'.$questionId = 'required|string';
];
}
现在使用 laravel 验证函数验证数组。
$request->validate($validatedQuestionIds);
我建议您避免给它们添加前缀名称,并使用类似以下内容创建一个实际的数组;
<input type="checkbox" name="question[{{ $question->id }}]" ...>
现在在你的控制器方法中你可以这样做了;
$questions = $request->input('questions');
您的验证器规则可能如下所示;
$request->validate([
'questions.*' => ['required', 'string']
]);
Laravel 允许您以多种方式验证数组,check out the documentation.
如果您真的想使用前缀,可以考虑构建一个 custom validation rule。但我同意 ollieread 的观点,您可能应该将所有问题作为数组元素来处理。为了稍微扩展一下这个答案,这些规则是这样的:
$rules = [
'questions' => 'array',
'questions.*.text' => 'required_with:questions|string',
'questions.*.score' => 'required_with:questions|integer|min:1|max:10'
];