Проверка Загрузки Изображений

Йо! Я работаю над формой, где я прикрепляю некоторое изображение.

Форма:

{{ Form::file('attachments[]', array('multiple')) }}

Утверждение:

$this->validate($response, array(
    'attachments' => 'required | mimes:jpeg,jpg,png',
));

Я также попытался «изображение» в качестве правила валидатора, но всякий раз, когда я публикую форму с изображением jpg я получаю обратно ошибки:

Вложения должны иметь тип файла: jpeg, jpg, png.

Работа с Laravel 5.3

1 ответ

  1. Так как вы определили входное имя attachments[], вложения будут представлять собой массив, содержащий ваш файл. Если вам нужно загрузить только один файл , вы можете переименовать свое имя ввода, чтобы бытьattachments, без [](или attachmentбыло бы больше смысла в этом случае). Если необходимо загрузить несколько элементов, можно создать итератор внутри Requestкласса-extending, который возвращает набор правил, покрывающих каждую запись внутри attachments[]

    protected function attachments()
    {
        $rules          = [];
        $postedValues   = $this->request->get('attachments');
    
        if(null == $postedValues) {
            return $rules;
        }
    
        // Let's create some rules!
        foreach($postedValues as $index => $value) {
            $rules["attachments.$index"] = 'required|mimes:jpeg,jpg,png';
        }
        /* Let's imagine we've uploaded 2 images. $rules would look like this:
            [
                'attachments.0' => 'required|mimes:jpeg,jpg,png',
                'attachments.1' => 'required|mimes:jpeg,jpg,png'
            ];
        */
    
        return $rules;
    }
    

    Затем можно просто вызвать эту функцию внутриrules(), чтобы объединить возвращаемый массив attachmentsс любыми другими правилами, которые можно указать для этого запроса:

    public function rules()
    {
        return array_merge($this->attachments(), [
           // Create any additional rules for your request here... 
        ]);
    }
    

    Если у вас еще нет выделенного Requestрасширяющегося класса для вашей формы, вы можете создать его с cli artisan, введя: php artisan make:request MyRequestName. Внутри будет создан новый класс запроса app\Http\Requests. Это файл, куда вы бы поместили код выше. Затем можно просто ввести этот класс в сигнатуру функции конечной точки контроллера:

    public function myControllerEndpoint(MyRequestName $request)
    {
        // Do your logic... (if your code gets here, all rules inside MyRequestName are met, yay!)
    }