Modélisation : Création d’un Projet CRUD avec Laravel et MySQL

Sommaire

  1. Configuration Initiale
  2. Structure MVC de Laravel
  3. Routes et Navigation
  4. Gestion de la Base de Données
  5. Fonctionnalités CRUD
  6. Fonctionnalités Avancées
  7. Conclusion

1. Configuration Initiale

Pré-requis

Avant de commencer, assurez-vous d’avoir installé les outils suivants :

  • PHP (version ≥ 8.0) et Composer (gestionnaire de dépendances PHP).
  • Serveur local (LAMP, WAMP, Laragon ou XAMPP).
    • Laragon est recommandé pour sa simplicité et sa compatibilité avec Laravel.

Tester l’installation

Exécutez les commandes suivantes pour vérifier que tout est correctement installé :

bash

php -v composer -v 

Création du Projet Laravel

  1. Créez un nouveau projet Laravel en exécutant :

    bash

    composer create-project laravel/laravel projet-laravel 
  2. Configurez votre base de données dans le fichier
    .env

    généré :

    env

    DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=crud_laravel DB_USERNAME=root DB_PASSWORD= 
  3. Lancez le serveur local Laravel :

    bash

    php artisan serve 

    Accédez à votre projet dans un navigateur à l’adresse

    http://127.0.0.1:8000

    .

2. Structure MVC de Laravel

Laravel suit une architecture MVC (Modèle-Vue-Contrôleur) permettant de séparer la logique métier, la présentation et le contrôle.

Modèle (Model)

  1. Créez un modèle et une migration associés :

    bash

    php artisan make:model Produit -m 

    Cela génère :

    • Un fichier modèle dans
      /app/Models/Produit.php

      .

    • Un fichier de migration dans
      /database/migrations/

      .

  2. Définissez les champs dans le fichier de migration :

    php

    Schema::create('produits', function (Blueprint $table) { $table->id(); $table->string('nom'); $table->text('description'); $table->decimal('prix', 8, 2); $table->integer('quantite'); $table->timestamps(); }); 
  3. Lancez les migrations pour créer la table :

    bash

    php artisan migrate 

Vue (View)

  1. Créez les fichiers Blade suivants dans
    /resources/views/produits/

    :

    • index.blade.php

      : Liste des produits.

    • create.blade.php

      : Formulaire de création.

    • edit.blade.php

      : Formulaire de modification.

    • show.blade.php

      : Détails d’un produit.

  2. Ajoutez un fichier de mise en page globale (
    layout.blade.php

    ) dans

    /resources/views/

    :

    html

    <!DOCTYPE html> <html lang="fr"> <head> <meta charset="UTF-8"> <title>@yield('title')</title> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css"> </head> <body> <div class="container mt-4"> @yield('content') </div> </body> </html> 

Contrôleur (Controller)

  1. Générez un contrôleur avec les méthodes CRUD préconfigurées : bash
    php artisan make:controller ProduitController --resource 
  2. Cela crée un fichier dans
    /app/Http/Controllers/ProduitController.php

    avec les méthodes :

    • index()

      ,

      create()

      ,

      store()

      ,

      edit()

      ,

      update()

      ,

      destroy()

      .

3. Routes et Navigation

  1. Ajoutez une route ressource dans
    /routes/web.php

    :

    php

    use App\Http\Controllers\ProduitController; Route::resource('produits', ProduitController::class); 
  2. Listez toutes les routes générées :

    bash

    php artisan route:list 

4. Gestion de la Base de Données

Configuration

Assurez-vous que votre fichier

.env

est correctement configuré avec les informations de connexion à MySQL.

Migrations

Si vous ajoutez des champs supplémentaires, vous pouvez modifier les fichiers de migration et relancer la commande :

bash

php artisan migrate:refresh 

5. Fonctionnalités CRUD

Créer un Produit

  1. Dans
    ProduitController

    :

    • Méthode
      create()

      : php

      public function create() { return view('produits.create'); } 
    • Méthode
      store()

      : php

      public function store(Request $request) { $validated = $request->validate([ 'nom' => 'required', 'description' => 'required', 'prix' => 'required|numeric', 'quantite' => 'required|integer', ]); Produit::create($validated); return redirect()->route('produits.index')->with('success', 'Produit ajouté avec succès!'); } 
  2. Formulaire dans
    create.blade.php

    :

    html

    <form action="{{ route('produits.store') }}" method="POST"> @csrf <input type="text" name="nom" placeholder="Nom du produit" class="form-control mb-3"> <textarea name="description" placeholder="Description" class="form-control mb-3"></textarea> <input type="number" name="prix" placeholder="Prix" class="form-control mb-3"> <input type="number" name="quantite" placeholder="Quantité" class="form-control mb-3"> <button type="submit" class="btn btn-primary">Ajouter</button> </form> 

Lire les Produits

  1. Dans
    index.blade.php

    , affichez les produits : html

    @foreach ($produits as $produit) <tr> <td>{{ $produit->nom }}</td> <td>{{ $produit->prix }}</td> </tr> @endforeach 

Mettre à Jour un Produit

  1. Méthode
    edit()

    :

    php

    public function edit($id) { $produit = Produit::findOrFail($id); return view('produits.edit', compact('produit')); } 
  2. Méthode
    update()

    :

    php

    public function update(Request $request, $id) { $validated = $request->validate([...]); Produit::whereId($id)->update($validated); return redirect()->route('produits.index')->with('success', 'Produit mis à jour avec succès!'); } 

Supprimer un Produit

  1. Méthode
    destroy()

    : php

    public function destroy($id) { Produit::findOrFail($id)->delete(); return redirect()->route('produits.index')->with('success', 'Produit supprimé avec succès!'); } 

6. Fonctionnalités Avancées

Messages de Validation et de Succès

Ajoutez dans vos vues :

php

@if(session('success')) <div class="alert alert-success">{{ session('success') }}</div> @endif 

Utilisation de Bootstrap

Appliquez des classes Bootstrap pour styliser vos formulaires, tables, et boutons.

Pagination

Ajoutez la pagination avec Eloquent :

php

$produits = Produit::paginate(10); 

Dans votre vue :

html

{{ $produits->links() }} 

7. Conclusion

Ce projet CRUD avec Laravel et MySQL couvre les bases de la gestion des données (CRUD) tout en respectant la structure MVC de Laravel. Vous pouvez étendre ce projet avec des fonctionnalités supplémentaires comme l’authentification, les filtres avancés ou l’exportation de données. Laravel offre de puissants outils pour construire rapidement des applications robustes et maintenables.