2016-09-19 23 views
1

Ich versuche, eine Datei zu validieren, die ich über ein Formular in meine DB einfügen möchte. Die Datei sollte "csv" sein und ihr Inhalt muss ebenfalls validiert werden. HierLaravel: Importieren von CSV - Validierung

ist die Import-Methode in der Steuerung, die die Form behandelt:

public function importFromCsv(array $data) { 
    if (Input::hasFile('import_file')) { 
     $path = Input::file('import_file')->getRealPath(); 

     $data = Excel::load($path, function($reader) { 
      //... 
     })->get(); 

     $this->validator = new QuoteValidator(); 

     $this->validate($data); 

     if (!empty($data) && $data->count()) { 

      foreach ($data as $key => $value) { 
       $insert[] = [ 
        'content' => $value->content, 
        'created_at' => $value->created_at, 
        'updated_at' => $value->created_at 
       ]; 
      } 

      if (!empty($insert)) { 
       DB::table('quotes')->insert($insert); 
      } 
     } 
    } 
    return true; 
} 

Die Validate-Methode:

public function validate(array $data) { 
    $this->validator = Validator::make($data, $this->rules, $this->messages); 

    if ($this->validator->fails()) { 
     $exception = new InvalidDataException(); 
     $errors = $this->_parseMessages(); 
     $exception->setErrors($errors); 
     throw $exception; 
     } 
} 

Der Fehler Ich habe:

Error in QuoteService. php line 123: Argument 1 wurde an übergeben App \ Services \ QuoteService :: validate() muss vom Typ array, 0123, seinObjekt gegeben, genannt in /var/www/html/Acadia/app/Services/QuoteService.php auf der Leitung 233 und

definiert
+0

Bitte ..post den Code Ihrer Methode 'validate'. Es erwartet ein Array. aber "data" ist das geladene Excel-Objekt – cmnardi

+0

öffentliche Funktion validate (array $ data) { $ this-> validator = Validator :: make ($ data, $ this-> rules, $ this-> messages); if ($ this-> validator-> fehlgeschlagen()) { $ exception = new InvalidDataException(); $ Fehler = $ this -> _ parseMessages(); $ exception-> setErrors ($ errors); throw $ Ausnahme; } } –

+0

Ich denke, das Problem ist, dass Sie versuchen, einen Validator zu verwenden, um das Excel-Objekt zu validieren, aber dieser Validator erwartet, Formularfelder zu validieren .; Hast du das schon einmal versucht? http://StackOverflow.com/Questions/23625672/Laravel-File-Upload-validation – cmnardi

Antwort

0

Die Variablen, die Sie an die Validate-Methode übergeben werden, ist ein Collection-Objekt (Documentation), aber Ihre Validierungsmethode erwartet ein Array.

Bevor Sie die Daten an Ihre Validierungsmethode übergeben, müssen Sie sie in ein Array konvertieren. Sie tun können, dass die Methode toArray()

Beispiel durch den Aufruf:

$data = Excel::load($path, function($reader) { 
    //... 
})->get()->toArray(); 
+0

Ergebnis: Aufruf einer Mitgliedsfunktion count() auf einem Nicht-Objekt –

+0

in Ihrer if-Anweisung, die Sie aufrufen $ data-> count() . Jetzt sind Ihre Daten ein Array. Sie müssen es in count ($ data) ändern. – flipjms