2016-06-28 48 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] = > string(50)「12400457_643171672489204_2452820305362127031_n.jpg」 [「mimeType」:「Symfony \ Component \ HttpFoundation \ File \ UploadedFile」:private] => string(10)「image/jpeg」 [「size」:「Symfony \ Component \ HttpFoundation \ File \ UploadedFile」:private] => int(18413) [「error」 File \ UploadedFile「:private] => int」(「pathName」:「SplFileInfo」:private] => string(25) 「C:\ wamp64 \ tmp \ phpBAE4.tmp」[「fileName」:「 SplFileInfo「:private] => string(11)」phpBAE4.tmp「} [1] => object(Illuminate \ Http \ UploadedFile)#217(7){」test「:」Symfony \ Component \ HttpFoundation \文件\ UploadedFile的 「:私人] => 布爾(假) [」 ORIGINALNAME 「:」 的Symfony \元器件\ HttpFoundation \文件\ UploadedFile的 「:私人] => 串(39) 」13296200_702501119889592_55691535_n.jpg「 [」 MIM eType「:」Symfony \ Component \ HttpFoundation \ File \ UploadedFile「:private] => string(10)」image/jpeg「 [」size「:」Symfony \ Component \ HttpFoundation \ File \ UploadedFile「:private] = (0)[「pathName」:「SplFileInfo」:private] => string(25)int(0)[「error」:「Symfony \ Component \ HttpFoundation \ File \ UploadedFile」:private] => int(95383) 「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 ▶} 
    ] 
] 

然後使用您的規則將在驗證聲明數組驗證通過使用星號來表示陣列字段:

$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'; 
    }