2016-06-28 2 views
3

Wie kann ich die Laravel-Dateiprüfung für mehrere Dateien in einer Schleife verwenden?Validierung mehrerer Dateien innerhalb einer Schleife

der Regel in einer einzigen Datei Validierung, kann ich wie

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

nur tun, aber jetzt möchte ich mehrere Dateien in einem einzigen Prozess validieren, wie

//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 
    } 
} 

nun für die Vorderseite Ende , um den Prozess des Sendens mehrerer Dateien in einem Post zu erläutern.

$(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); 
} 

und so in dem hinteren Ende, wenn ich die Anfrage Dump, erhalte ich diese

array (2) {[0] => Objekt (Illuminate \ Http \ UploadedFile) # 214 (7) { ["test": "Symfony \ Komponente \ HttpFoundation \ Datei \ UploadedFile": privat] => bool (falsch) ["originalName": "Symfony \ Component \ HttpFoundation \ Datei \ UploadedFile": private] = > string (50) "12400457_643171672489204_2452820305362127031_n.jpg" ["mimeType": "Symfony \ Komponente \ HttpFoundation \ Datei \ UploadedFile": privat] => Zeichenfolge (10) "image/jpeg" ["Größe": "Symfony \ Komponente \ HttpFoundation \ Datei \ UploadedFile": privat] => int (18413) ["Fehler": "Symfony \ Component \ HttpFoundation \ Datei \ UploadedFile ": privat] => int (0) [" Pfadname ":" SplFileInfo ": privat] => Zeichenfolge (25) " C: \ wamp64 \ tmp \ phpBAE4.tmp "[" Dateiname ":" SplFileInfo ": private] => Zeichenfolge (11)" phpBAE4.tmp "} [1] => Objekt (Illuminate \ Http \ UploadedFile) # 217 (7) { [" test ":" Symfony \ Component \ HttpFoundation \ File \ UploadedFile ": privat] => bool (false) [" Originalname ":" Symfony \ Component \ HttpFoundation \ File \ UploadedFile ": privat] => string (39) "13296200_702501119889592_55691535_n.jpg" [" Mim eType ":" Symfony \ Komponente \ HttpFoundation \ Datei \ UploadedFile ": private] => Zeichenfolge (10)" image/jpeg " [" Größe ":" Symfony \ Component \ HttpFoundation \ Datei \ UploadedFile ": private] = > int (95383) ["Fehler": "Symfony \ Komponente \ HttpFoundation \ Datei \ UploadedFile": privat] => int (0) ["pathName": "SplFileInfo": privat] => string (25) "C: \ wamp64 \ tmp \ phpBAE5.tmp" [ "filename": "SplFileInfo": privat] => string (11) "phpBAE5.tmp"}}

irgendwelche Ideen, Hinweise, helfen bitte, wie Laravel Datei Validierung auf mehrere Dateien in einer Schleife zu verwenden?

PS: Ich laufe auf Laravel 5.2

+0

hier überprüft? http://stackoverflow.com/questions/18079240/validating-multiple-file-uploads-with-lararvel-4 – Ctc

Antwort

0

Versuchen Senden das image Dateieingabefeld als ein Feld und dann Array Validierung verwenden. Wenn Sie Laravel 5.2 verwenden, können Sie Array Validation verwenden und die foreach-Schleife zum Erstellen der Regeln streichen.

Zuerst müssten Sie Ihre Dateieingabe als ein Array einrichten ...

Wenn Sie ein Eingabefeld mit:

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

Ihre Anfrage würde dann durch auf der Suche etwas wie folgt kommen:

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

Dann mit Array Validierung Ihre Regeln im Prüfer erklärt werden würde durch Verwenden des Asterix-Symbols, um ein Array-Feld anzuzeigen:

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

Überprüfen Sie die Dokumente hier für weitere Informationen: https://laravel.com/docs/5.2/validation#validating-arrays

+0

Das gleiche hier, die gleiche Idee, ich habe es bereits angewendet, danke für die Erwähnung. –

+0

Froh, dass es funktionierte, fröhliche Codierung! – haakym

0

Sie folgendes versuchen:

foreach($this->input('image') as $key => $value){ 
     $rules['image.'.$key] = 'image|max_width:1000|max_height:1000'; 
    }