2014-05-13 26 views
19

Sono nuovo di Laravel. Ho un modulo con una funzione di caricamento file su di esso. Come posso convalidare il loro file? Permetterò solo i file di Microsoft Word. Ecco il mio codice di convalida.Convalida caricamento file Laravel

Voglio solo controllare se inseriscono un file di parole ms e se non lo saranno non verranno elaborati.

public function store() 
{ 
    // Validate 
    $rules = array(
     'pda'       => 'required|unique:forms', 
     'controlnum'     => 'required|unique:forms', 
     'date'      => 'required', 
     'churchname'     => 'required', 
     'title'      => 'required', 
     'pastorname'     => 'required', 
     'contactnum'     => 'required', 
     'address'      => 'required', 
     'state'      => 'required', 
     'region'      => 'required', 
     'area'      => 'required', 
     'city'      => 'required', 
     'zipcode'      => 'required|numeric|max:9999', 
     'tgjteachertraining'   => 'required', 
     'localcontact'    => 'required', 
     'tgjdatestart'    => 'required', 
     'tgjdateend'     => 'required', 
     'tgjcourse'     => 'required|numeric', 
     'childrengraduated'   => 'required|numeric|max:450', 
     'childrenacceptjesus'   => 'required|numeric', 
     'howmanycomitted'    => 'required|numeric', 
     'recievedbibles'    => 'required|numeric', 
     'descgradevent'    => 'required', 
     'whatwillyoudo'    => 'required', 
     'pastortest'     => 'required', 
     'teachertest'     => 'required', 
     'childrentest'    => 'required', 
     'file'      => 'required|max:10000', 
    ); 

    $validator = Validator::make(Input::all(), $rules); 

    // process the form 
    if ($validator->fails()) { 
     return Redirect::to('forms/create')->withErrors($validator); 
    } else { 
     // store 
     $forms = new Forms; 
     $forms->pda       = Input::get('pda'); 
     $forms->controlnum    = Input::get('controlnum'); 
     $forms->date    = Input::get('date'); 
     $forms->churchname     = ucwords(Input::get('churchname')); 
     $forms->title      = ucwords(Input::get('title')); 
     $forms->pastorname     = ucwords(Input::get('pastorname')); 
     $forms->address      = Input::get('address'); 
     $forms->contactnum     = Input::get('contactnum'); 
     $forms->state      = Input::get('state2'); 
     $forms->region      = Input::get('region2'); 
     $forms->area      = Input::get('area2'); 
     $forms->citytown     = Input::get('city2'); 
     $forms->zipcode      = Input::get('zipcode'); 
     $forms->tgjteachertraining   = Input::get('tgjteachertraining'); 
     $forms->localcontact   = ucwords(Input::get('localcontact')); 
     $forms->tgjdatestart   = Input::get('tgjdatestart'); 
     $forms->tgjdateend    = Input::get('tgjdateend'); 
     $forms->tgjcourse   = Input::get('tgjcourse'); 
     $forms->childrengraduated   = Input::get('childrengraduated'); 
     $forms->childrenacceptjesus  = Input::get('childrenacceptjesus'); 
     $forms->howmanycomitted   = Input::get('howmanycomitted'); 
     $forms->recievedbibles   = Input::get('recievedbibles'); 
     $forms->descgradevent   = Input::get('descgradevent'); 
     $forms->whatwillyoudo   = Input::get('whatwillyoudo'); 
     $forms->pastortest   = Input::get('pastortest'); 
     $forms->teachertest    = Input::get('teachertest'); 
     $forms->childrentest   = Input::get('childrentest'); 
     $file     = Input::file('file'); 
     $filename     = $file->getClientOriginalName(); 
     $destinationPath    = 'uploads/'.Input::get('pda'); 
     $uploadSuccess    = Input::file('file')->move($destinationPath, $filename); 
     $forms->docurl    = 'uploads/'.Input::get('pda').'/'.$filename; 
     if($uploadSuccess) { 
     $forms->save(); 
     //Session::flash('message', 'Successfully submitted form!'); 
     return Redirect::to('forms/create'); 
     Session::flash('message', 'Successfully submitted form!'); 

     } 
     else { 
     return Response::json('error', 400); 
     } 
    } 
} 

risposta

35

Per convalidare tipo MIME di un file di input in laravel è possibile utilizzare la regola mimes. Ricorda di abbinare il tipo mime rilevato con il mimo effettivo del file che fornisci. Può variare su diversi server.

Ad esempio, si desidera attivare l'aggiunta e documento di Word in si forma:

1) in config/mimes.php aggiungere i tipi MIME di seguito:

'doc' => array('application/msword', 'application/vnd.ms-office'), 
    'docx' => array('application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/zip'), 

2) nella vostra convalida $rules aggiungere i seguenti elementi :

'file' => 'required|max:10000|mimes:doc,docx' //a required, max 10000kb, doc or docx file 
+0

sì, crearlo e riempirlo in modo analogo al resto dei file di configurazione, come una matrice di chiavi. Per quanto riguarda le chiavi - questo è quello che ho incluso nella mia risposta :) – Gadoma

+0

Ciao, grazie! Ho fatto quello che hai detto e seguire questo https://github.com/jasonlewis/laravel.com/blob/master/application/config/mimes.php Ma ho ancora ricevuto l'errore: – Yassi

+1

LogicException Impossibile indovinare il tipo mime dato che non sono disponibili indovinatori (hai abilitato l'estensione php_fileinfo?) – Yassi

2

Prova questo?

'file' => 'required|max:10000|mimes:application/vnd.openxmlformats-officedocument.wordprocessingml.document' 

Si consiglia di impostare un certo messaggio personalizzato per la risposta però :)

Problemi correlati