Bases : Construire un projet Laravel

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.

.

Tuto : Laravel Ecommerce

Laravel 11 et Voyager forment un duo puissant pour développer rapidement des applications e-commerce robustes et personnalisables. Pourquoi : -...

Tuto : Laravel Ecommerce

Laravel 11 et Voyager forment un duo puissant pour développer rapidement des applications e-commerce robustes et personnalisables. Pourquoi : -...