如何验证 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'
];