2016-09-19 18 views
1

私は、フォームからデータベースに挿入したいファイルを検証しようとしています。ファイルは "csv"であり、その内容も検証されます。Laravel:CSVインポートをインポートする

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

validateメソッド::私が得た

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

エラー:QuoteServiceで

ErrorExceptionここ

は、フォームを処理し、コントローラでインポート方法です。 PHPの行123:引数1が に渡されたApp \ Services \ QuoteService :: validate()は、型配列0123でなければなりませんライン233上 /var/www/html/Acadia/app/Services/QuoteService.phpに呼び出され、指定されたオブジェクト、および 定義さ

+0

あなたの方法 'validate'のコードを..postしてください:あなたは、メソッドtoArray()

例を呼び出すことによってそれを行うことができます。それは配列を受け取ることを期待しています。 'data'はロードされたExcelオブジェクトです – cmnardi

+0

public function validate(array $ data) { $ this-> validator = Validator :: make($ data、$ this-> rules、$ this-> messages); if($ this-> validator-> fails()){ $ exception = new InvalidDataException(); $ errors = $ this - > _ parseMessages(); $例外 - > setErrors($エラー); throw $ exception; } } –

+0

私は、Excelオブジェクトを検証するためにバリデーターを使用しようとしていますが、このバリデーターはフォームフィールドの検証を期待していると思います。このまま試してみましたか? http://stackoverflow.com/questions/23625672/laravel-file-upload-validation – cmnardi

答えて

0

あなたがvalidateメソッドに渡している変数は、コレクションオブジェクトです(Documentation )しかし、あなたのvalidateメソッドは配列を必要とします。

データを検証メソッドに渡す前に、そのデータを配列に変換する必要があります。

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

結果:$ data-> count()を呼び出しているif文のオブジェクトでないオブジェクト –

+0

のメンバー関数count()を呼び出して、 。データは配列です。 count($ data)に変更する必要があります。 – flipjms

関連する問題