【问题标题】:Laravel's file validation make the filed requiredLaravel 文件验证使该字段成为必填项
【发布时间】:2018-08-30 20:53:25
【问题描述】:

我有一个包含一些输入和一个 file input 的表单。
一切正常,但有一个奇怪的问题!

这是我的验证码:

    $validator = \Validator::make($request->all(), [
            'name' => 'required|max:25|min:3',
            'email' => 'required|email|max:35|min:5',
            'phone' => 'required|max:15|min:7',
            'file' => 'max:2000|mimes:jpeg,png,doc,docs,pdf',               
        ]);

问题是我没有为file设置required但是我不知道为什么当我提交表单时它说:
文件必须是类型的文件:jpeg , png, doc, 文档, pdf
其实我想file 是可选的。

我试过sometimes:

'file' => 'sometimes|max:2000|mimes:jpeg,png,doc,docs,pdf', 

但它没有用。
感谢您的任何建议。

更新:

我的 Ajax 请求:

$(document).ready(function () {
                $("#submit").click(function (event) {
                    event.preventDefault();
                    var formData = new FormData();
                    formData.append('name', $('#name').val());
                    formData.append('email', $('#email').val());
                    formData.append('phone', $('#phone').val());
                    formData.append('telegram', $('#telegram').val());
                    formData.append('contactWith', $('#contactWith').val());
                    formData.append('orderType', $('#orderType').val());
                    formData.append('price', $('#price').val());
                    formData.append('uiLevel', $('#uiLevel').val());
                    formData.append('codingType', $('#codingType').val());
                    formData.append('maxTime', $('#maxTime').val());
                    formData.append('file', $('#file')[0].files[0]);
                    formData.append('message', $('#message').val());
                    $.ajax({
                        type: "POST",
                        url: "{{route('orders.store')}}",
                        headers: {
                            "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content")
                        },
                        data: formData,
                        contentType: false,
                        processData: false,
                        success: function (msg) {

                        },
                    }, "json")
                })
            });

还有我的文件输入:

<div class="form-group">
    <label for="file">send file</label>
    <br>
    <label id="browse-label" for="file"><i class="fa fa-upload" aria-hidden="true"></i>browse
        <input type="file" id="file">
    </label>
    <span id="filename">no file chosen</span>
</div>

【问题讨论】:

  • ermm..您的验证是正确的..您是否检查了请求中的文件是否实际上是空的?尝试用nullable替换sometimes
  • 我忘了说我使用了 Ajax,当我从 ajax 的数据中删除 file 时,问题就解决了! / 谢谢,我试过nullable 但没用。
  • @ZeroOne 我更新了我的问题。

标签: ajax laravel performance laravel-validation laravel-5.6


【解决方案1】:

使用nullable 规则

文档:https://laravel.com/docs/8.x/validation#a-note-on-optional-fields

这给了你:

'file' => 'nullable|max:2000|mimes:jpeg,png,doc,docs,pdf', 

【讨论】:

    【解决方案2】:

    你可以这样做

    $validator = \Validator::make($request->all(), [
            'name' => 'required|max:25|min:3',
            'email' => 'required|email|max:35|min:5',
            'phone' => 'required|max:15|min:7',              
        ]);
    
    if($request->file){
        $validator = \Validator::make($request->all(), [
                'file' => 'max:2000|mimes:jpeg,png,doc,docs,pdf',               
            ]);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-07
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      • 1970-01-01
      • 2012-05-23
      • 2013-03-23
      相关资源
      最近更新 更多