【问题标题】:Laravel 5.4 : Dynamic validation ruleLaravel 5.4:动态验证规则
【发布时间】:2018-01-12 05:54:30
【问题描述】:

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

我的输入具有以下类型的模式名称projects-0-1project-0-2project-1-0 等等... 这些是文件输入,因此人们可以上传文档/图像.

因此,基本上,我一直在尝试获取(理想情况下)类似的验证消息:

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

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

我已经尝试了几件事,但似乎没有任何效果。

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

需要考虑的事项:

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

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

有什么提示吗?

【问题讨论】:

  • 你试过这样'file.*.mimes' => 'Only PDF, JPEG, PNG are allowed.',stackoverflow.com/a/45188623/5148479
  • 是的,我尝试了所有爵士乐,但没有帮助。我对验证本身没有问题,但是当这些不是请求的一部分时,将错误消息与文件输入相匹配,因为在提交表单时它们仍然是空的。
  • 我基本上需要的是在我的规则数组中的输入名称中放置一个通配符:$globalRules = [ ... 'project_documents-0-0' => 'required|file', ... ]; 我希望最后的规则能够匹配破折号后 0-9 之间的任何数字..所以我认为这样的事情会做:'project_documents-*-*' => 'required|file', 但实际上它不会..

标签: laravel validation file-upload


【解决方案1】:

好的,如果有人也遇到这个问题,请回到这里。我找到了一种到达那里的“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');

一旦我得到这个数组,我就可以做类似的事情,并为 DOM 中的输入文件添加我的规则集:

foreach($hiddenInputs as $hiddenInput){
    $globalRules[$request[$hiddenInput]] = 'required';
}

不确定这是否是到达那里的正确方法,但它对我有用,而且我不觉得该代码可怕。我会坚持下去,直到找到更好的方法。

【讨论】:

    猜你喜欢
    • 2017-06-21
    • 2017-07-08
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多