Мое приложение позволяет пользователю загружать несколько файлов изображений одновременно, однако я не могу понять, как проверить массив изображений.
$input = Request::all(); $rules = array( ... 'image' => 'required|image' ); $validator = Validator::make($input, $rules); if ($validator->fails()) { $messages = $validator->messages(); return Redirect::to('venue-add') ->withErrors($messages); } else { ...
Эта проверка не будет выполнена, так как 'image'
представляет собой массив, если я изменю правило проверки на:
$rules = array( ... 'image' => 'required|array' );
Проверка будет проходить, но изображения внутри массива не были проверены.
Этот ответ использует каждое ключевое слово для префикса правил проверки, однако это в laravel 4.2, а в Laravel 5 оно не работает.
Я пытаюсь выполнить итерацию по массиву и проверку на каждом изображении отдельно, но есть ли встроенная функция, чтобы сделать это для меня?
Это работает для меня
$rules = array( ... 'image' => 'required', 'image.*' => 'image|mimes:jpg,jpeg' );
Я использовал технику, аналогичную тому, что рекомендовал Jeemusu и после первоначальной проверки, чтобы убедиться, что массив изображений присутствует, итерации через массив со вторым валидатором, убедившись, что каждый элемент массива на самом деле является образом. Вот код:
$input = Request::all(); $rules = array( 'name' => 'required', 'location' => 'required', 'capacity' => 'required', 'description' => 'required', 'image' => 'required|array' ); $validator = Validator::make($input, $rules); if ($validator->fails()) { $messages = $validator->messages(); return Redirect::to('venue-add') ->withErrors($messages); } $imageRules = array( 'image' => 'image|max:2000' ); foreach($input['image'] as $image) { $image = array('image' => $image); $imageValidator = Validator::make($image, $imageRules); if ($imageValidator->fails()) { $messages = $imageValidator->messages(); return Redirect::to('venue-add') ->withErrors($messages); } }