Bases : Construire un projet Laravel

15:04:23

La création d’un projet Laravel efficace nécessite une approche bien structurée pour organiser les données et gérer les fonctionnalités. Voici un guide détaillé pour réussir votre projet Laravel :

1. Modèles : Représentation des Données

Les modèles définissent les entités du système (exemple : utilisateurs, produits, commandes) et leurs relations.
Étapes :

Créer un modèle : Utilisez la commande Artisan pour générer un modèle avec une migration associée :

php artisan make:model Product -m

L’option -m génère également une migration.

Définir les attributs du modèle : Exemple pour le modèle Product :

namespace App\Models;


use Illuminate\Database\Eloquent\Model;


class Product extends Model
{
    protected $fillable = ['name', 'description', 'price', 'stock'];
}

Ajouter les relations : Exemple : Un produit appartient à une catégorie.

public function category()
{
    return $this->belongsTo(Category::class);
}

2. Migrations : Structuration de la Base de Données

Les migrations définissent les tables et leurs colonnes dans la base de données.

Étapes :

Modifier la migration générée : Exemple de migration pour les produits :

public function up()
{
    Schema::create('products', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->text('description');
        $table->decimal('price', 8, 2);
        $table->integer('stock');
        $table->timestamps();
    });
}

Exécuter les migrations : Créez les tables dans la base de données avec la commande :

php artisan migrate

3. Contrôleurs : Logique Métier

Les contrôleurs gèrent les requêtes HTTP et relient les modèles aux vues.

Étapes :

Créer un contrôleur : Utilisez Artisan pour générer un contrôleur de ressource :

php artisan make:controller ProductController –resource

Ajouter des méthodes au contrôleur : Exemple d’implémentation dans ProductController :

namespace App\Http\Controllers;

use App\Models\Product;
use Illuminate\Http\Request;


class ProductController extends Controller
{
    public function index()
    {
        $products = Product::all();
        return view('products.index', compact('products'));
    }


    public function create()
    {
        return view('products.create');
    }

    public function store(Request $request)
    {
        $validated = $request->validate([
            'name' => 'required',
            'price' => 'required|numeric',
            'stock' => 'required|integer',
        ]);

        Product::create($validated);

        return redirect()->route('products.index')
            ->with('success', 'Produit ajouté avec succès !');
    }
}

Définir les routes : Ajoutez les routes dans routes/web.php :

use App\Http\Controllers\ProductController;

Route::resource('products', ProductController::class);

4. Vues : Interfaces Utilisateur

Les vues affichent les données pour les utilisateurs.

Étapes :

Créer une vue pour lister les produits : Fichier : resources/views/products/index.blade.php :

@extends('layouts.app')




@section('content')
<div class="container">
    <h1>Liste des Produits</h1>
    @if($products->isEmpty())
        <p>Aucun produit disponible.</p>
    @else
        <ul>
            @foreach($products as $product)
                <li>{{ $product->name }} - {{ $product->price }} </li>
            @endforeach
        </ul>
    @endif
</div>
@endsection

Créer une vue pour ajouter un produit : Fichier : resources/views/products/create.blade.php :

@extends('layouts.app')

@section('content')
<div class="container">
    <h1>Ajouter un Produit</h1>
    <form action="{{ route('products.store') }}" method="POST">
        @csrf
        <div>
            <label for="name">Nom</label>
            <input type="text" name="name" id="name" required>
        </div>
        <div>
            <label for="price">Prix</label>
            <input type="text" name="price" id="price" required>
        </div>
        <div>
            <label for="stock">Stock</label>
            <input type="number" name="stock" id="stock" required>
        </div>
        <button type="submit">Ajouter</button>
    </form>
</div>
@endsection

5. Seeders : Peuplement de la Base de Données

Les seeders permettent de pré-remplir la base de données avec des données initiales.

Étapes :

Créer un seeder :

php artisan make:seeder ProductSeeder

Remplir le seeder : Exemple dans database/seeders/ProductSeeder.php :

namespace Database\Seeders;

use App\Models\Product;
use Illuminate\Database\Seeder;

class ProductSeeder extends Seeder
{
    public function run()
    {
        Product::create([
            'name' => 'Produit 1',
            'description' => 'Description du produit 1',
            'price' => 10.99,
            'stock' => 100,
        ]);




        Product::create([
            'name' => 'Produit 2',
            'description' => 'Description du produit 2',
            'price' => 15.99,
            'stock' => 50,
        ]);
    }
}

Exécuter le seeder :

php artisan db:seed --class=ProductSeeder

6. Factories : Génération de Données de Test

Les factories permettent de créer des données aléatoires pour les tests.

Étapes :

Créer une factory :

php artisan make:factory ProductFactory --model=Product

Configurer la factory : Exemple dans database/factories/ProductFactory.php :

namespace Database\Factories;

use Illuminate\Database\Eloquent\Factories\Factory;

class ProductFactory extends Factory
{
    public function definition()
    {
        return [
            'name' => $this->faker->word(),
            'description' => $this->faker->sentence(),
            'price' => $this->faker->randomFloat(2, 5, 100),
            'stock' => $this->faker->numberBetween(1, 500),
        ];
    }
}

Utiliser la factory dans un seeder :

Product::factory(50)->create(); // Génère 50 produits

Exécuter le seeder :

php artisan db:seed --class=ProductSeeder

Résumé

  1. Modèles : Définissent les entités et leurs relations.
    Migrations : Structurent la base de données.
    Contrôleurs : Gèrent la logique métier.
    Vues : Affichent les données aux utilisateurs.
    Seeders : Peuplent la base de données avec des données initiales.
    Factories : Génèrent des données de test en masse.

.

par