Javascript 方法Illumb\Validation\Validator::validateVideo不存在

Javascript 方法Illumb\Validation\Validator::validateVideo不存在,javascript,laravel,php-7,laravel-5.8,dropzone,Javascript,Laravel,Php 7,Laravel 5.8,Dropzone,我想上传一个dropzone的视频,我在控制器、视图、模型、特征等方面做了一些尝试。。。但当我调用函数的路由时,返回了以下内容: Method Illuminate\Validation\Validator::validateVideo does not exist. 我知道我的问题在哪里 我附上我的实际代码: 路线 Route::post('uploads/storeVideo', 'UploadController@storeVideo')->name('medias.createV

我想上传一个dropzone的视频,我在控制器、视图、模型、特征等方面做了一些尝试。。。但当我调用函数的路由时,返回了以下内容:

Method Illuminate\Validation\Validator::validateVideo does not exist.
我知道我的问题在哪里

我附上我的实际代码:

路线

Route::post('uploads/storeVideo', 'UploadController@storeVideo')->name('medias.createVideo');
控制器

public function storeVideo(UploadRequest $request)
    {
        $input = $request->all();
        try {
            $upload = $this->uploadRepository->create($input);
            $upload->addMedia($input['file'])
                    ->withCustomProperties(['uuid' => $input['uuid'], 'user_id' => auth()->id()])
                    ->toMediaCollection($input['field']);           
        } catch (ValidatorException $e) {
            return $this->sendResponse(false, $e->getMessage());
        }
    }
查看

<div class="form-group row">
            {!! Form::label('video', trans("lang.restaurant_video"), ['class' => 'col-3 control-label text-right ']) !!}
            <div class="col-9">
                <div style="width: 100%" class="dropzone video" id="video" data-field="video">
                    <input type="hidden" name="video">
                </div>
                <a href="#loadMediaModal" data-dropzone="video" data-toggle="modal" data-target="#mediaModal" class="btn btn-outline-{{setting('theme_color','primary')}} btn-sm float-right mt-1">{{ trans('lang.media_select')}}</a>
                <div class="form-text text-muted w-50">
                    {{ trans("lang.restaurant_video_help") }}
                </div>
            </div>
        </div>
        @prepend('scripts')
            <script type="text/javascript">
                var var15671147011688676454bleVideo = '';
                @if(isset($restaurant) && $restaurant->hasMedia('video'))
                    var15671147011688676454bleVideo = {
                        name: "{!! $restaurant->getFirstMediaVideoUrl('video')->name !!}",
                        size: "{!! $restaurant->getFirstMediaVideoUrl('video')->size !!}",
                        type: "{!! $restaurant->getFirstMediaVideoUrl('video')->mime_type !!}",
                        collection_name: "{!! $restaurant->getFirstMediaVideoUrl('video')->collection_name !!}"
                    };
                @endif
                var dz_var15671147011688676454bleVideo = $(".dropzone.video").dropzone({
                        url: "{!! url('panel/uploads/storeVideo') !!}",

                        /*dictDefaultMessage: "{{trans('validation.dropzone_dictDefaultMessage')}}",
                        dictFallbackMessage: "{{trans('validation.dropzone_dictFallbackMessage')}}",
                        dictFallbackText: "{{trans('validation.dropzone_dictFallbackText')}}",
                        dictFileTooBig: "{{trans('validation.dropzone_dictFileTooBig', [ 'size' => config('medialibrary.max_file_size') / 1024 / 1024 ])}}",
                        dictInvalidFileType: "{{trans('validation.dropzone_dictInvalidFileType')}}",
                        dictResponseError: "{{trans('validation.dropzone_dictResponseError')}}",
                        dictCancelUpload: "{{trans('validation.dropzone_dictCancelUpload')}}",
                        dictCancelUploadConfirmation: "{{trans('validation.dropzone_dictCancelUploadConfirmation')}}",
                        dictRemoveFile: "{{trans('validation.dropzone_dictRemoveFile')}}",*/
                        dictMaxFilesExceeded: "{{ trans('validation.dropzone_dictMaxFilesExceeded') }}",
                        maxFilesize: {!! config('medialibrary.max_file_size_video') / 1024 / 1024 !!},
                        acceptedFiles: "video/*",  
                        addRemoveLinks: true,
                        maxFiles: 1,
                        
                        init: function () {
                            @if(isset($restaurant) && $restaurant->hasMedia('video'))
                                dzInit(this, var15671147011688676454bleVideo, '{!! url($restaurant->getFirstMediaVideoUrl('video','mp4')) !!}')
                            @endif

                            this.on("error", function(file, message) {

                                console.log(message);

                                $('.video').after(`<ul class="alert alert-danger" style="list-style: none;">
                                                        <li>
                                                            ${message}
                                                        </li>
                                                    </ul>`);
                                this.removeFile(file); 
                            });

                            this.on("success", function(file, message) {
                                $('.alert-danger').remove();
                                $('.video').after(`<ul class="alert alert-success" style="list-style: none;">
                                                        <li>
                                                            {{trans('validation.dropzone_success')}}
                                                        </li>
                                                    </ul>`);
                            });


                        },
                        accept: function (file, done) {
                            dzAccept(file, done, this.element, "{!! config('medialibrary.videos_folder') !!}");
                        },
                        sending: function (file, xhr, formData) {
                            dzSending(this, file, formData, '{!! csrf_token() !!}');
                        },
                        maxfilesexceeded: function (file) {
                            dz_var15671147011688676454bleVideo[0].mockFile = '';
                            dzMaxfile(this, file);
                        },
                        complete: function (file) {
                            dzComplete(this, file, var15671147011688676454bleVideo, dz_var15671147011688676454bleVideo[0].mockFile);
                            dz_var15671147011688676454bleVideo[0].mockFile = file;
                        },
                        removedfile: function (file) {
                            dzRemoveFile(
                                file, var15671147011688676454bleVideo, '{!! url("panel/restaurants/remove-media") !!}',
                                'video', '{!! isset($restaurant) ? $restaurant->id : 0 !!}', '{!! url("panel/uploads/clear") !!}', '{!! csrf_token() !!}'
                            );
                        }
                    });
                dz_var15671147011688676454bleVideo[0].mockFile = var15671147011688676454bleVideo;
                dropzoneFields['video'] = dz_var15671147011688676454bleVideo;
            </script>
        @endprepend
型号

public function rules()
    {
        return [
            'file' => 'image|video|mimes:jpeg,png,jpg,gif,svg,mp4,mov,avi,mkv',
        ];
    }
// VIDEO AND ALLOWED TYPES
    public function getFirstMediaUrlVideo($collectionName = 'default', $conversion = '')
    {
        $url = $this->getFirstMediaVideoUrlTrait($collectionName);
        if($url){
            $array = explode('.', $url);
            $extension = strtolower(end($array));
            if (in_array($extension, ['.mp4', '.mkv'])) {
                return asset($this->getFirstMediaVideoUrlTrait($collectionName, $conversion));
            } else {
                return asset('videos/' . $extension . '.mp4');
            }
        }else{
            return asset('videos/video_default.mp4');
        }
    }

谢谢你的帮助,我不知道为什么会这样。谢谢

您的错误,至少是第一个错误,在这里:

public function rules()
{
    return [
        'file' => 'image|video|mimes:jpeg,png,jpg,gif,svg,mp4,mov,avi,mkv',
    ];                   ^^^^^
}
没有
视频
验证规则(您可以查看完整列表)。相反,您应该做的是单独使用(或)规则:

return [
    'file' => 'mimes:mp4,mov,avi,mkv',
];    

有关可以使用的mime扩展的完整列表,请参见。

您的错误,至少是第一个错误,如下所示:

public function rules()
{
    return [
        'file' => 'image|video|mimes:jpeg,png,jpg,gif,svg,mp4,mov,avi,mkv',
    ];                   ^^^^^
}
没有
视频
验证规则(您可以查看完整列表)。相反,您应该做的是单独使用(或)规则:

return [
    'file' => 'mimes:mp4,mov,avi,mkv',
];    

关于您可以使用的mime扩展的完整列表,.

谢谢您的回复@KennyHorna,但我需要图像和视频如何才能做到这一点?@Daviseraalonso您可以使用相同的规则验证这两个扩展。只需添加更多mime类型:
'file'=>'mimes:mp4、mov、avi、mkv、jpg、jpeg、png',
是的,一切正常,感谢youthaks的回复@KennyHorna,但我需要图像和视频如何做到这一点?@Daviseraalonso您可以使用相同的规则验证这两种类型。只需添加更多mime类型:
“文件”=>“mime:mp4、mov、avi、mkv、jpg、jpeg、png”,
是的,一切正常,谢谢