即使没有上传输入文件,Laravel mimes 验证也总是被调用(不使用必需的规则)

Posted

技术标签:

【中文标题】即使没有上传输入文件,Laravel mimes 验证也总是被调用(不使用必需的规则)【英文标题】:Laravel mimes validation always called even if no input file is uploaded (Not used required rule) 【发布时间】:2017-10-31 02:20:54 【问题描述】:

我只对文件输入字段使用了单一验证规则。这就是哑剧规则。如果没有上传文件,我想跳过这条规则,所以我没有使用“必需”规则。但即使没有上传文件,它也总是显示 mime 类型的消息。我刚刚添加了测试所需的规则,当时它显示了所需的错误消息。仅当使用带有 jquery.form.js 的 ajax 提交表单时才会出现此问题

【问题讨论】:

sometimes 添加到您的规则中。 【参考方案1】:

您可以为此使用sometimes 验证类型。

'file' => 'sometimes|mimes:jpeg,png'

在场时验证

在某些情况下,您可能希望仅当输入数组中存在该字段时才对该字段运行验证检查。要快速完成此操作,请将有时规则添加到您的规则列表中。

Official Laravel docs

【讨论】:

【参考方案2】:

您可以使用sometimes 规则。

'photo' => 'sometimes|mimes:jpeg,bmp,png'

您可以在此处查看更多信息https://laravel.com/docs/5.4/validation#conditionally-adding-rules

【讨论】:

仍然无法以我的形式工作。我认为问题在于使用 jquery.form js 使用 ajax 表单提交时【参考方案3】:

我最近在 ajax 上传时遇到了同样的问题,并使用

处理了文件验证
public function rules()

    $rules = [
        'invitation_message' => 'required'
    ];

    if (request()->hasFile('invitation_excel_sheet')) 
        $rules = array_merge($rules, [
            'invitation_excel_sheet' => 'mimes:xlsx,csv'
        ]);
    

    return $rules;

【讨论】:

【参考方案4】:

另一种方法是使用exclude_if:

public function rules()

    return [
        'link' => 'sometimes',
        'newPdf' => 'exclude_if:link,null|mimes:pdf',
    ];

【讨论】:

以上是关于即使没有上传输入文件,Laravel mimes 验证也总是被调用(不使用必需的规则)的主要内容,如果未能解决你的问题,请参考以下文章

如果文件在 laravel 中上传,则文件 mime 类型验证

Laravel 5 Mime 验证

Laravel Mime 类型验证(KML 文件)

Laravel - 视频文件验证

Laravel 文件上传:验证磁盘空间

Laravel 可以验证 markdown mime 类型吗?