Laravel-excel: Échec de la sérialisation de la fermeture : la sérialisation de 'Illuminate\Http\UploadedFile' n'est pas autorisée

Créé le 13 juin 2017  ·  3Commentaires  ·  Source: Maatwebsite/Laravel-Excel

[QUESTION]

maatwebsite/excel 2.1, Laravel 5.4

Bonjour gars. J'essaie d'importer un fichier Excel, mais j'obtiens une erreur commençant par "La sérialisation de la fermeture a échoué : la sérialisation de 'Illuminate\Http\UploadedFile' n'est pas autorisée". J'ai essayé quelques dépannages mais je ne comprends pas pourquoi ce problème persiste. C'est le code source que j'utilise pour gérer les fichiers Excel d'importation.

if($request->hasFile('file')){
     $file = $request->file('file')->getRealPath();
     \Excel::filter('chunk')->load($file)->chunk(200, function($result) use ($request){
        foreach ($result as $item) {
           if(collect($item)->has('title') && collect($item)->has('category_id')  && collect($item)->has('file')){
                Content::create([
                     'title' => $item->title,
                     'category_id' => $item->category_id,
                     'file' => $item->file,
                     'reference' => $request->input('reference')
                ]);
           }
        }
       });
      return redirect()->back();
}

Merci de m'aider à résoudre ce problème.

Commentaire le plus utile

Vous ne pouvez pas passer $request dans la fermeture, car cela est sérialisé et mis en file d'attente. Vous devez passer des variables explicites.

Essaye ça:

if($request->hasFile('file')){
     $file = $request->file('file')->getRealPath();
    $reference = $request->input('reference');
     \Excel::filter('chunk')->load($file)->chunk(200, function($result) use ($reference){
        foreach ($result as $item) {
           if(collect($item)->has('title') && collect($item)->has('category_id')  && collect($item)->has('file')){
                Content::create([
                     'title' => $item->title,
                     'category_id' => $item->category_id,
                     'file' => $item->file,
                     'reference' => $reference
                ]);
           }
        }
       });
      return redirect()->back();
}

Tous les 3 commentaires

Vous ne pouvez pas passer $request dans la fermeture, car cela est sérialisé et mis en file d'attente. Vous devez passer des variables explicites.

Essaye ça:

if($request->hasFile('file')){
     $file = $request->file('file')->getRealPath();
    $reference = $request->input('reference');
     \Excel::filter('chunk')->load($file)->chunk(200, function($result) use ($reference){
        foreach ($result as $item) {
           if(collect($item)->has('title') && collect($item)->has('category_id')  && collect($item)->has('file')){
                Content::create([
                     'title' => $item->title,
                     'category_id' => $item->category_id,
                     'file' => $item->file,
                     'reference' => $reference
                ]);
           }
        }
       });
      return redirect()->back();
}

Merci @patrickbrouwers. Cela m'a sauvé la vie :+1: .

Merci @patrickbrouwers.

Cette page vous a été utile?
0 / 5 - 0 notes