【问题标题】:Validation for file types not working in laravel 4验证在 laravel 4 中不起作用的文件类型
【发布时间】:2015-01-09 00:13:34
【问题描述】:

经过大量搜索但没有找到解决方案。

我正在验证 laravel 4.2.* 中的输入文件。使用模型验证规则,但规则对我不起作用。

我在 model.php 中使用的规则

'reqfile'       => 'mimes:txt,pdf,doc,docx|max:20000'

'reqfile'       => 'mimes:application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,text/plain,application/pdf|max:20000'

应用这些规则后,会生成验证错误,但错误也会出现在有效文件选择中。

有人告诉我,我在哪里应用规则是错误的。 提前致谢。

【问题讨论】:

    标签: validation laravel-4


    【解决方案1】:

    要使此验证器规则起作用,您需要确保为 reqfile 验证的值是以下实例:

    Symfony\Component\HttpFoundation\File\File
    

    Symfony\Component\HttpFoundation\File\UploadedFile
    

    因此,如果您要验证表单,reqfile 必须是上传的文件。这意味着它的值应该来自Input::file()。所以你的验证器应该是这样的:

    Validator::make(
        // Value for reqfile
        array('reqfile' => Input::file('reqfile')),
        // Validator rule for reqfile
        array('reqfile' => 'mimes:txt,pdf,doc,docx|max:20000')
    );
    

    验证规则实际上会尝试通过提取 mime 类型来猜测扩展名,并将其与传递给规则的扩展名列表进行比较。这意味着您需要将文件扩展名传递给规则,而不是实际的 mime 类型,正如 documentation 明确指出的那样:

    正在验证的文件必须具有与列出的扩展名之一对应的 MIME 类型

    【讨论】:

    • 所以我理解如果您将文件上传元素合并为较大表单的一部分,并且您希望验证上传的文件和表单中的字段,则必须使用两个单独的验证器::make() 语句?具体来说,一个验证使用 Input::all() 作为数据的字段,另一个验证使用 Input::file('file_fieldname') 作为数据的上传文件?如果在 Laravel 文档中更明确地说明这将是有帮助的......
    • @dspitzle 不,就验证器而言,文件输入字段与其他字段一样,唯一的区别是它保存文件实例而不是字符串。因此,您可以像使用任何其他字段一样包含验证规则,不需要单独的验证器实例。答案仅使用该字段,因为它是唯一与问题相关的字段,您可以向数组添加更多值/规则。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-21
    • 2013-01-02
    • 2020-03-07
    • 2017-06-23
    • 1970-01-01
    • 2013-04-17
    • 2018-02-15
    相关资源
    最近更新 更多