Comment importer et exporter des fichiers Excel et CSV dans une application Laravel .
Nous utiliserons le package maatwebsite/excel pour les tâches d’importation et d’exportation. Dans cet exemple, nous allons créer un formulaire simple permettant de télécharger un fichier CSV et de créer plusieurs utilisateurs. Ensuite, nous créerons une route d’exportation qui téléchargera tous les utilisateurs de la base de données dans un fichier Excel.
Suivez les étapes ci-dessous pour créer la fonction d’importation et d’exportation dans une application Laravel 11. Vous pourrez exporter des fichiers avec des extensions .csv, .xls, et .xlsx.
Table des matières : [Masquer]
- 1 Étapes pour l’importation et l’exportation de fichiers CSV avec Laravel 11
- 1.1 Étape 1 : Installer Laravel 11
- 1.2 Étape 2 : Installer le package maatwebsite/excel
- 1.3 Étape 3 : Créer des enregistrements fictifs
- 1.4 Étape 4 : Créer une classe d’importation
- 1.5 Étape 5 : Créer une classe d’exportation
- 1.6 Étape 6 : Créer un contrôleur
- 1.7 Étape 7 : Créer des routes
- 1.8 Étape 8 : Créer un fichier Blade
Étapes pour l’importation et l’exportation de fichiers CSV avec Laravel 11
Installer Laravel 11
Installer le package maatwebsite/excel
Créer des enregistrements fictifs
Créer une classe d’importation
Créer une classe d’exportation
Créer un contrôleur
Créer des routes
Créer un fichier Blade
Étape 1 : Installer Laravel 11
composer create-project laravel/laravel example-app
Étape 2 : Installer le package maatwebsite/excel
Installez le package à l’aide de la commande suivante :
composer require maatwebsite/excel
Étape 3 : Créer des enregistrements fictifs
Ajoutez des enregistrements fictifs à la table users pour tester l’exportation. Utilisez la commande suivante :
php artisan tinker
User::factory()->count(10)->create()
Étape 4 : Créer une classe d’importation
Créez une classe d’importation avec la commande suivante :
php artisan make:import UsersImport --model=User
Ajoutez la logique d’importation dans cette classe pour valider et insérer les données des utilisateurs.
// app/Imports/UsersImport.php
<?php
namespace App\Imports;
use App\Models\User;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Concerns\WithValidation;
use Hash;
class UsersImport implements ToModel, WithHeadingRow, WithValidation
{
/**
* @param array $row
*
* @return \Illuminate\Database\Eloquent\Model|null
*/
public function model(array $row)
{
return new User([
'name' => $row['name'],
'email' => $row['email'],
'password' => Hash::make($row['password']),
]);
}
/**
* Write code on Method
*
* @return response()
*/
public function rules(): array
{
return [
'name' => 'required',
'password' => 'required|min:5',
'email' => 'required|email|unique:users'
];
}
}
Étape 5 : Créer une classe d’exportation
Créez une classe d’exportation avec la commande suivante :
php artisan make:export UsersExport --model=User
Ajoutez la logique d’exportation dans cette classe pour récupérer les données de la table users.
app/Exports/UsersExport.php
<?php
namespace App\Exports;
use App\Models\User;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
class UsersExport implements FromCollection, WithHeadings
{
/**
* @return \Illuminate\Support\Collection
*/
public function collection()
{
return User::select("id", "name", "email")->get();
}
/**
* Write code on Method
*
* @return response()
*/
public function headings(): array
{
return ["ID", "Name", "Email"];
}
}
Étape 6 : Créer un contrôleur
Créez un contrôleur nommé UserController avec les méthodes index(), export(), et import(). Utilisez la commande suivante :
php artisan make:controller UserController
Ajoutez les méthodes nécessaires pour gérer l’importation et l’exportation.
// app/Http/Controllers/UserController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
use App\Exports\UsersExport;
use App\Imports\UsersImport;
use App\Models\User;
class UserController extends Controller
{
/**
* @return \Illuminate\Support\Collection
*/
public function index()
{
$users = User::get();
return view('users', compact('users'));
}
/**
* @return \Illuminate\Support\Collection
*/
public function export()
{
return Excel::download(new UsersExport, 'users.xlsx');
}
/**
* @return \Illuminate\Support\Collection
*/
public function import(Request $request)
{
// Validate incoming request data
$request->validate([
'file' => 'required|max:2048',
]);
Excel::import(new UsersImport, $request->file('file'));
return back()->with('success', 'Users imported successfully.');
}
}
Étape 7 : Créer des routes
Ajoutez des routes dans le fichier routes/web.php pour afficher la liste des utilisateurs, importer des fichiers, et exporter des fichiers.
// routes/web.php
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\UserController;
Route::get('users', [UserController::class, 'index']);
Route::get('users-export', [UserController::class, 'export'])->name('users.export');
Route::post('users-import', [UserController::class, 'import'])->name('users.import');
Étape 8 : Créer un fichier Blade
Créez un fichier nommé users.blade.php dans le dossier resources/views. Ce fichier contiendra un formulaire pour l’importation de fichiers ainsi qu’une table affichant les utilisateurs et une option pour exporter les données.
// resources/views/users.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Laravel 11 Import Export Excel to Database Example - ItSolutionStuff.com</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" />
</head>
<body>
<div class="container">
<div class="card mt-5">
<h3 class="card-header p-3"><i class="fa fa-star"></i> Laravel 11 Import Export Excel to Database Example - ItSolutionStuff.com</h3>
<div class="card-body">
@session('success')
<div class="alert alert-success" role="alert">
{{ $value }}
</div>
@endsession
@if ($errors->any())
<div class="alert alert-danger">
<strong>Whoops!</strong> There were some problems with your input.<br><br>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form action="{{ route('users.import') }}" method="POST" enctype="multipart/form-data">
@csrf
<input type="file" name="file" class="form-control">
<br>
<button class="btn btn-success"><i class="fa fa-file"></i> Import User Data</button>
</form>
<table class="table table-bordered mt-3">
<tr>
<th colspan="3">
List Of Users
<a class="btn btn-warning float-end" href="{{ route('users.export') }}"><i class="fa fa-download"></i> Export User Data</a>
</th>
</tr>
<tr>
<th>ID</th>
<th>Name</th>
<th>Email</th>
</tr>
@foreach($users as $user)
<tr>
<td>{{ $user->id }}</td>
<td>{{ $user->name }}</td>
<td>{{ $user->email }}</td>
</tr>
@endforeach
</table>
</div>
</div>
</div>
</body>
</html>
Une fois toutes les étapes nécessaires terminées, lancez l’application Laravel avec la commande suivante :
php artisan serve
Ensuite, ouvrez votre navigateur web, entrez l’URL suivante et visualisez le résultat de l’application :
http://localhost:8000/users
Vous pourrez importer des utilisateurs via un fichier CSV et exporter les utilisateurs existants au format Excel.