La gestion incohérente des données et fichiers peut entraîner des erreurs critiques.
Ces erreurs peuvent provoquer des pertes de données ou des dysfonctionnements dans votre application.
Découvrez comment utiliser les transactions dans Laravel pour garantir la cohérence et la sécurité de vos opérations.
Initiez-vous à Laravel et réalisez votre première application en toute confiance.

Lorsque vous effectuez plusieurs opérations liées, comme la sauvegarde de données et de fichiers, une transaction garantit que toutes les actions aboutissent ou qu’aucune d’entre elles n’est appliquée en cas d’erreur. Cela évite des incohérences entre vos données et vos fichiers.
Dans cette section, vous allez :
Modifier store pour transactions Laravel
Voici le code pour la méthode store :
public function store(Request $request)
{
$user = auth()->user();
DB::beginTransaction();
try{
$request->validate([
'name' => ['required', 'string', 'min:3', 'max:20', Rule::unique('users')->ignore($user->id)],
'email' => ['required', 'string', 'email', Rule::unique('users')->ignore($user->id)],
'avatar' => ['sometimes', 'nullable', 'file', 'image', 'mimes:jpeg,png', 'dimensions:min_width=200,min_height=200'],
]);
if ($request->hasFile('avatar') && $request->file('avatar')->isValid()) {
// Supprimer l'ancien répertoire d'avatars si nécessaire
if (Storage::exists('avatars/' . $user->id)) {
Storage::deleteDirectory('avatars/' . $user->id);
}
// Générer un nom unique pour l'image
$imageName = time() . '-' . $request->file('avatar')->getClientOriginalName();
// Chemin de destination pour l'image principale
$destinationPath = public_path('avatars/' . $user->id . '/');
if (!file_exists($destinationPath)) {
mkdir($destinationPath, 0777, true);
}
// Lire l'image
$image = Image::read($request->file('avatar'));
// Sauvegarder l'image principale
$image->save($destinationPath . $imageName);
// Générer une miniature et la sauvegarder
$destinationPathThumbnail = public_path('avatars/' . $user->id . '/thumbnail/');
if (!file_exists($destinationPathThumbnail)) {
mkdir($destinationPathThumbnail, 0777, true);
}
$image->resize(200, 200, function ($constraint) {
$constraint->aspectRatio();
$constraint->upsize();
});
$image->save($destinationPathThumbnail . $imageName);
// Mettre à jour ou créer les informations de l'avatar dans la base de données
$user->avatar()->updateOrCreate(
['user_id' => $user->id],
[
'filename' => $imageName,
'url' => asset('avatars/' . $user->id . '/' . $imageName),
'thumb_url' => asset('avatars/' . $user->id . '/thumbnail/' . $imageName),
]
);
}
}catch(\Exception $e){
DB::rollBack();
dd($e->getErrors());
}
DB::commit();
return back()
->with('success', 'Profil et avatar mis à jour avec succès!')
->with('imageName', $imageName);
}
Étapes: Transactions et sauvegarde de données
Validation des données
- Vous validez les champs name, email et avatar.
- La validation garantit que les données sont valides avant d’être utilisées.
Gestion des fichiers d’avatar
- Si un fichier est téléchargé, vous supprimez l’ancien répertoire associé à l’utilisateur.
- Vous créez des répertoires pour stocker l’image principale et sa miniature.
- Vous utilisez le package Intervention/Image pour redimensionner et sauvegarder l’image.
Mise à jour de la base de données
- Vous insérez ou mettez à jour les informations de l’avatar en base de données avec la méthode updateOrCreate.
Transaction
- Toutes les opérations sont encapsulées dans une transaction avec DB ::beginTransaction() et DB::commit().
- En cas d’erreur, la transaction est annulée avec DB ::rollBack().
Retour utilisateur
- Vous retournez un message de succès ou d’erreur à l’utilisateur.
Résultats: Intégrité des données et avatars
Cas de succès
- Les données utilisateur (nom, email) sont mises à jour.
- L’image d’avatar est sauvegardée avec sa miniature.
- Les informations d’avatar sont ajoutées ou mises à jour en base de données.
- Un message de confirmation est affiché à l’utilisateur.
Voici affichage de message
Cas d’erreur
- Si une erreur se produit (validation échouée, problème de sauvegarde, etc.), aucune modification n’est appliquée.
- Un message d’erreur détaillé est retourné.
Utilisez un système de gestion de fichiers cloud (comme AWS S3) en production pour gérer les avatars.
Implémentez une gestion d’erreurs plus avancée en journalisant les exceptions avec Log::error().
Testez cette fonctionnalité avec des fichiers valides et non valides pour vous assurer de sa robustesse.
Avec ce guide, vous avez tous les outils pour sécuriser et gérer l’insertion des données utilisateur et d’images dans votre application Laravel
Formez-vous gratuitement avec Alphorm !
Maîtrisez les compétences clés en IT grâce à nos formations gratuites et accélérez votre carrière dès aujourd'hui.
FAQ
Comment fonctionnent les transactions dans Laravel?
Pourquoi utiliser une transaction pour la sauvegarde de fichiers?
Comment gérer les erreurs dans une transaction Laravel?
Quels sont les avantages de l'updateOrCreate dans Laravel?
Comment assurer la validité des données avant leur utilisation?
Conclusion
En appliquant ces techniques, vous assurez une gestion sécurisée et efficace des données dans Laravel. Quelles autres stratégies utilisez-vous pour sécuriser vos applications?