2016-06-28 4 views
3

Как я могу использовать проверку файла Laravel для нескольких файлов внутри цикла?проверка нескольких файлов внутри цикла

Обычно в одной проверки файлов, я могу просто сделать, как

$validator = Validator::make($request->all(),[ 
    'image' => 'image|max_width:1000|max_height:1000' 
]); 
if($validator->fails()){ 
    //validation fails 
} 

, но теперь я хочу проверить несколько файлов в одном процессе, как

//store to a variable 
$file = $request->file('image'); 
if($file){ //if request file image exist 
    foreach($request->file('image') as $i){ 
    //here, validate each file image, but it just I don't know how 
    } 
} 

Теперь для переднего конца , чтобы рассказать о процессе отправки нескольких файлов в одном сообщении.

$(document).on("change",'input[type="file"]',function(){ 
    if($(this).val()!==""){ 
     var files = this.files; 
     handleFileUpload(files); 
     $(this).val(""); 
    } 
}); 

function handleFileUpload(files) 
{ 
    //create a formData 
    var fd = new FormData(); 
    //loop through e 
    for (var i = 0; i < files.length; i++) 
    { 
     //append each file object to the formData 
     fd.append('image[]', files[i]); 
    } 
    //this function is where ajax request will be process 
    sendFileToServer(fd); 
} 

и так в задней части, если я сбросить запрос, я получаю эти

массив (2) {[0] => объект (Осветите \ Http \ UploadedFile) # 214 (7) { ["test": "Symfony \ Component \ HttpFoundation \ File \ UploadedFile": private] => bool (false) ["originalName": "Symfony \ Component \ HttpFoundation \ File \ UploadedFile": private] = > строка (50) "12400457_643171672489204_2452820305362127031_n.jpg" ["mimeType": "Symfony \ Component \ HttpFoundation \ File \ UploadedFile": private] => строка (10) "image/jpeg" ["размер": "Symfony \ Component \ HttpFoundation \ File \ UploadedFile": private] => int (18413) ["error": "Symfony \ Component \ HttpFoundation \ File \ UploadedFile ": private] => int (0) [" pathName ":" SplFileInfo ": private] => string (25) " C: \ wamp64 \ tmp \ phpBAE4.tmp "[" fileName ":" SplimileInfo ": private] => string (11)" phpBAE4.tmp "} [1] => объект (Illuminate \ Http \ UploadedFile) # 217 (7) { [" test ":" Symfony \ Component \ HttpFoundation \ File \ UploadedFile ": частная] => BOOL (ложь) [" ORIGINALNAME ":" Symfony \ Component \ HttpFoundation \ File \ UploadedFile ": частное] => строки (39) "13296200_702501119889592_55691535_n.jpg" [" мим eType ":" Symfony \ Component \ HttpFoundation \ File \ UploadedFile ": private] => строка (10)" image/jpeg " [" размер ":" Symfony \ Component \ HttpFoundation \ File \ UploadedFile ": private] = > int (95383) ["error": "Symfony \ Component \ HttpFoundation \ File \ UploadedFile": private] => int (0) ["pathName": "SplFileInfo": private] => string (25) "C: \ wamp64 \ TMP \ phpBAE5.tmp" [ "имя_файла": "SplFileInfo": частная] => строка (11) "phpBAE5.tmp"}}

любые идеи, подсказки, помощь пожалуйста, как использовать проверку файла Laravel на нескольких файлах внутри цикла?

PS: Я бегу на Laravel 5.2

+0

проверено здесь? http://stackoverflow.com/questions/18079240/validating-multiple-file-uploads-with-laravel-4 – Ctc

ответ

0

Попробуйте отправить поле ввода image файла в виде массива, а затем с помощью проверки массива. Если вы используете Laravel 5.2, вы можете использовать Проверка массива и выровнять цикл foreach для построения правил.

Во-первых, вам нужно будет настроить входной файл в виде массива ...

Если вы используете один вход поле:

<input type="file" name="image[]" multiple> 

Ваш запрос будет потом через ищет что-то вроде этого:

array:2 [▼ 
    "_token" => "oX3sTXPDnNiVj9mX20VOHe2xo1Ahx6sWzU4VHZxh" 
    "image" => array:2 [▼ 
    0 => UploadedFile {#147 ▶} 
    1 => UploadedFile {#146 ▶} 
    ] 
] 

Затем с помощью проверки массива ваши правила будут объявленную в валидатор используя символ asterix для указания поля массива:

$validator = Validator::make($request->all(),[ 
    'image.*' => 'image|max_width:1000|max_height:1000' 
]); 

Проверьте документы здесь для получения дополнительной информации: https://laravel.com/docs/5.2/validation#validating-arrays

+0

То же самое, та же идея, я уже применил его, спасибо, что упомянул об этом. –

+0

Рад, что у вас это работает, счастливая кодировка! – haakym

0

Вы можете попробовать следующее:

foreach($this->input('image') as $key => $value){ 
     $rules['image.'.$key] = 'image|max_width:1000|max_height:1000'; 
    } 
Смежные вопросы