我很难找到问题的答案,而且我的测试证明不是很有用。所以也许这里有人会遇到我面临的同样问题。
我输入了以下类型的图案名称projects-0-1
,project-0-2
,project-1-0
等等...... 这些是文件输入所以人们可以上传文件/图像。
基本上,我一直试图获得一个(理想情况下)类似的验证信息:
$validator->getMessageBag()->add('project-*-*', 'File is empty!');
OR
$validator->getMessageBag()->add('project-*', 'File is empty!');
我已经尝试了几件事似乎没什么用。
我添加自定义消息的原因是,如果文件对$request
对象是空的,则不会验证该文件。所以我首先需要检查是否$request->hasFile
,如果它不是我想添加错误消息。
需要考虑的事项:
输入可以动态添加到表单中,因此我不知道我需要事先验证的文件输入的确切数量。
即使这不会影响代码和验证,但值得注意的是,当我将表单嵌入到另一个网站时,所有内容都通过ajax发生。因此我创建了端点等......
任何提示?
答案 0 :(得分:0)
是的,回到这里,万一有人也面临这个问题。我找到了一种“hacky”方式来实现这一目标,它为我提供了诀窍。
当每个输入文件动态添加到DOM时,我添加了一个额外的隐藏输入,该输入将文件输入的名称保存为值。
然后在我的控制器中我这样做:
public function createValuesKeyArray ($preset)
{
$regexPattern = '/^'. $preset .'-[0-9]*$/';
$customPresets = preg_grep($regexPattern, array_keys(Input::all()));
$keys = [];
foreach ($customPresets as $customPreset) {
array_push($keys, $customPreset);
}
return $keys;
}
// This allows me to get all hidden input names in an array in order to get its value from the $request
$hiddenInputs = $this->createValuesKeyArray('hidden-project-name');
一旦我得到这个数组,我可以做类似的东西,并且dinamycally为DOM中存在的输入文件添加我的规则集:
foreach($hiddenInputs as $hiddenInput){
$globalRules[$request[$hiddenInput]] = 'required';
}
不确定这是否是正确的方法,但它确实适合我,我发现这些代码并不可怕。我会坚持下去,直到找到更好的方法。