Laravel 5.4:动态验证规则

时间:2017-08-04 10:23:40

标签: laravel validation file-upload

我很难找到问题的答案,而且我的测试证明不是很有用。所以也许这里有人会遇到我面临的同样问题。

我输入了以下类型的图案名称projects-0-1project-0-2project-1-0等等...... 这些是文件输入所以人们可以上传文件/图像。

基本上,我一直试图获得一个(理想情况下)类似的验证信息:

$validator->getMessageBag()->add('project-*-*', 'File is empty!');

OR

$validator->getMessageBag()->add('project-*', 'File is empty!');

我已经尝试了几件事似乎没什么用。

我添加自定义消息的原因是,如果文件对$request对象是空的,则不会验证该文件。所以我首先需要检查是否$request->hasFile,如果它不是我想添加错误消息。

需要考虑的事项:

  • 输入可以动态添加到表单中,因此我不知道我需要事先验证的文件输入的确切数量。

  • 即使这不会影响代码和验证,但值得注意的是,当我将表单嵌入到另一个网站时,所有内容都通过ajax发生。因此我创建了端点等......

任何提示?

1 个答案:

答案 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';
}

不确定这是否是正确的方法,但它确实适合我,我发现这些代码并不可怕。我会坚持下去,直到找到更好的方法。