如何以Laravel形式验证未知数的字段



我正在使用laravel 5.4,并且具有数据库中的问题,每个问题都需要使用值1 thru 10的无线电按钮进行'分数'一个未知数的问题,我需要验证以测试所有问题都选择了分数。所有广播按钮组均命名为q_,然后是Question_ID(例如Q_1,Q_2等(。我想这一切都可以手动完成,但是Laravel是一个如此强大的框架,我必须认为有一种" Laravel"的方式。有人有任何建议吗?

我建议您避免给它们前缀的名称,并使用以下内容创建一个实际数组;

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

现在,在您的控制器方法中,您可以做;

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

,您的验证器规则看起来如下;

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

laravel允许您以多种方式验证数组,请查看文档。

,如果您确实想使用前缀,则可以考虑构建自定义验证规则。但是我同意Ollieread的观点,您可能应该将所有问题作为数组元素处理。为了稍微扩展该答案,这就是这些规则的样子:

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

您可以使用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 Validation函数验证数组。

$request->validate($validatedQuestionIds);