2014-05-13 3 views
19

Ich bin neu in Laravel. Ich habe ein Formular mit einer Datei-Upload-Funktion darauf. Wie kann ich ihre Datei validieren? Ich werde nur Microsoft Word-Dateien erlauben. Hier ist mein Validierungscode.Laravel File Upload Validation

Ich möchte nur überprüfen, ob sie eine ms Word-Datei einfügen und wenn nicht, wird es nicht verarbeitet werden.

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

Antwort

35

Um MIME-Typ einer Datei Eingabe in Laravel bestätigen Sie die mimes Regel verwenden kann. Denken Sie daran, den erkannten Mime-Typ mit dem tatsächlichen Mime der von Ihnen bereitgestellten Datei abzugleichen. Es kann auf verschiedenen Servern variieren.

Zum Beispiel möchten Sie das Hinzufügen und Word-Dokument ermöglichen, in Sie bilden:

1) in config/mimes.php die folgenden MIME-Typen hinzufügen:

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

2) in Ihrer Validierungs $rules die folgenden Elemente hinzufügen :

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

ja, erstellen Sie es und füllen Sie ähnlich wie die restlichen Konfigurationsdateien, wie ein Array von Schlüsseln. Wie für die Schlüssel - das ist, was ich in meiner Antwort enthalten :) – Gadoma

+0

Hallo Danke! Ich tat, was Sie sagten und folgen Sie diesem https://github.com/jasonlewis/laravel.com/blob/master/application/config/mimes.php Aber ich bekam noch Fehler: – Yassi

+1

LogicException Unfähig, den Mimetyp zu erraten da keine Guests verfügbar sind (Hast du die Erweiterung php_fileinfo aktiviert?) – Yassi

2

Versuchen Sie das?

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

Möglicherweise möchten Sie für die Antwort einige benutzerdefinierte Nachricht setzen, obwohl :)