Проверка изображения (файла) OctoberCMS не работает должным образом

Я пытаюсь поместить проверки изображения (файла) в файл моей модели, но, похоже, он не работает так, как я хочу. Ниже приведен мой сценарий.

fields.yaml

fields:
    slider_image:
        label: 'Slider Image (jpg,png,gif) (1920 X 600)'
        mode: image
        fileTypes: 'jpeg,jpg,png,gif'
        useCaption: true
        thumbOptions:
            mode: crop
            extension: auto
        span: auto
        required: 1
        type: fileupload

Model.php

public $rules = [    
'slider_image' => 'required|mimes:jpeg,jpg,png,gif',
];

public $customMessages = [                
            'slider_image.required' => 'Please select slider image',                
            'slider_image.mimes' => 'Please select valid slider image',                
];

Как вы можете ясно видеть здесь, у меня есть опция загрузки файла, называемая slider_image, и в моем файле .yaml я поставил проверки для загрузки только jpeg, jpg, png ,gif

Но проблема в моих правилах проверки.

Даже если я загружаю файл с любым другим расширением (например, .zip), у меня всегда появляется сообщение об ошибке

Выберите изображение слайдера

но он должен отображать ошибку ниже, поскольку у меня уже есть недопустимый файл расширения.

Пожалуйста, выберите действительное изображение слайдера

Если я не загружаю изображение, оно должно отображать первую ошибку, а если я загружаю недопустимое изображение, оно должно отображать вторую ошибку.

Может ли кто-нибудь сказать мне, что здесь не так в моем текущем сценарии?

Кроме того, я хотел знать, есть ли какое-либо доступное правило проверки, с помощью которого мы можем проверить ширину ширины изображения и установить правило минимальной ширины высоты для загрузки и поместить сообщение проверки на его основе в файл нашей модели.

Спасибо


person Mittul At TechnoBrave    schedule 02.12.2016    source источник
comment
К вашему сведению, я также задавал этот вопрос в репозитории GIT за октябрь и октябрьский форум поддержки и жду помощи.   -  person Mittul At TechnoBrave    schedule 05.12.2016
comment
Я думаю, что это проблема концепции, потому что файл никогда не загружался на сервер, если он не соответствует типам файлов, поэтому по этой причине вы не можете запустить проверку mime, но я думаю, что вы можете переопределить метод afterValidate() и выполнить свою пользовательскую проверку самостоятельно бросить throw new ValidationException($validation);   -  person OsDev    schedule 07.12.2016
comment
Я понимаю. Но я не знаю, как это сделать с помощью afterValidate(). Если вы можете направить меня или предоставить мне кусок кода, так как я совершенно не умею реализовывать эту часть, если честно :(   -  person Mittul At TechnoBrave    schedule 07.12.2016


Ответы (1)


Здесь задействованы два уровня проверки. Одним из них является встроенная функция проверки виджета загрузки файлов — это то, что настроено в вашем fields.yaml в параметрах виджета, т.е.

    mode: image
    fileTypes: 'jpeg,jpg,png,gif'

и это происходит на стороне клиента. После этого виджет fileuplod уже укажет вам (на стороне клиента), что этот тип недопустим, если вы загружаете, например, zip-файл, потому что: 1. Вы указали mode: image. 2. Вы указали filetypes: jpeg,jpg,png,gif. Загрузка вашего файла будет просто не принята на стороне клиента, поэтому при отправке формы ввод файла будет просто пустым.

Итак, ваш второй уровень проверки (указанный вашими $rules в Model.php), который выполняется после отправки формы на стороне сервера< Затем /em> получит пустой ввод файла (поскольку виджет загрузки даже не переслал тип файла, который вы пытались загрузить), и поэтому ответит «Пожалуйста, выберите изображение слайдера».

Так что валидатор работает корректно. Все работает правильно. Но если вы хотите, чтобы проверка mime в вашем Model.php реагировала на нежелательные типы файлов, вам придется удалить

fileTypes: 'jpeg,jpg,png,gif'

из вашего fields.yaml, иначе они даже не пройдут проверку вашей модели.

На ваш второй вопрос: нет, такой встроенной проверки правильности высоты и ширины изображения нет. Но вы можете указать «imageHeight» и «imageWidth» в файле fields.yaml, чтобы автоматически изменить размер загруженного изображения.

person trollkotze    schedule 09.12.2016