如何验证Laravel表单中未知数量的字段

时间:2018-03-26 09:43:16

标签: laravel-5 laravel-5.4 laravel-validation

我正在使用Laravel 5.4,并且有一个填充了数据库问题的表单,每个问题都要求使用1到10的单选按钮进行“得分”。我需要容纳未知数量的问题,我需要验证以测试所有问题都选择了分数。所有单选按钮组都命名为q_,后跟question_id(例如q_1,q_2等)。我想这一切都可以手动完成,但是Laravel是一个如此强大的框架,我不得不认为这是一种“Laravel”方式。有人有什么建议吗?

3 个答案:

答案 0 :(得分:0)

我建议你避免给它们带前缀的名字,并使用类似下面的内容创建一个实际的数组;

<input type="checkbox" name="question[{{ $question->id }}]" ...>

现在,您可以使用控制器方法;

$questions = $request->input('questions');

您的验证器规则可能如下所示;

$request->validate([
    'questions.*' => ['required', 'string']
]);

Laravel允许您以多种方式验证数组check out the documentation

答案 1 :(得分:0)

如果您真的想使用前缀,可以查看构建custom validation rule。但我同意ollieread,你应该把所有问题都作为数组元素来处理。为了扩展这个答案,这就是这些规则的样子:

$rules = [
    'questions' => 'array',
    'questions.*.text' => 'required_with:questions|string',
    'questions.*.score' => 'required_with:questions|integer|min:1|max:10'
];

答案 2 :(得分:-1)

您可以使用php和laravel来处理这个问题。假设您使用数组中的查询获得所有问题ID。

$questionIds = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

创建一个空数组来创建规则。

$validatedQuestionIds = [];

现在添加问题Ids的规则

foreach($questionIds as $key => $questionId){

    $validatedQuestionIds = [
       'q_'.$questionId = 'required|string';
    ];

}

现在使用laravel验证函数验证数组。

$request->validate($validatedQuestionIds);