1. Model
Créer le modèle Book:
php artisan make:model Book
Modifier le modèle Book dans app/Models/Book.php :
// app/Models/Book.php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Book extends Model
{
use HasFactory;
protected $primaryKey = 'numero';
protected $table = 'books';
protected $fillable = ['numero', 'titre', 'genre', 'author', 'prix'];
}
2. Migration
Créer la migration pour le modèle Book:
php artisan make:migration create_books_table
Modifier la migration générée dans database/migrations/YYYY_MM_DD_create_books_table.php :
// database/migrations/YYYY_MM_DD_create_books_table.php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up()
{
Schema::create('books', function (Blueprint $table) {
$table->bigIncrements('numero'); // Utiliser "numero" comme clé primaire
$table->string('titre');
$table->string('genre');
$table->string('author');
$table->float('prix');
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('books');
}
}
Exécuter la migration pour créer la table dans la base de données :
3. Controller
Créer le contrôleur BookController:
php artisan make:controller BookController
Modifier le fichier app/Http/Controllers/BookController.php :
// app/Http/Controllers/BookController.php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Book;
class BookController extends Controller
{
public function ajouter(Request $request)
{
// Logique pour ajouter un livre
Book::create($request->all());
return redirect('/books');
}
public function supprimer($numero)
{
// Logique pour supprimer un livre
Book::destroy($numero);
return redirect('/books');
}
public function modifier($numero)
{
// Logique pour afficher le formulaire de modification
$book = Book::findOrFail($numero);
return view('ModifierBooks', compact('book'));
}
public function mettreAJour(Request $request, $numero)
{
// Logique pour mettre à jour un livre
$book = Book::findOrFail($numero);
$book->update($request->all());
return redirect('/books');
}
public function detail($numero)
{
// Logique pour afficher les détails d'un livre
$book = Book::findOrFail($numero);
return view('DetailBook', compact('book'));
}
public function lister()
{
// Logique pour lister tous les livres
$books = Book::all();
return view('ListerBooks', compact('books'));
}
public function rechercherBooksParTitre(Request $request)
{
// Logique pour rechercher des livres par titre
$titre = $request->input('titre');
$books = Book::where('titre', 'like', '%' . $titre . '%')->get();
return view('ListerBooks', compact('books'));
}
public function rechercherBooksParAuthor(Request $request)
{
// Logique pour rechercher des livres par auteur
$author = $request->input('author');
$books = Book::where('author', 'like', '%' . $author . '%')->get();
return view('ListerBooks', compact('books'));
}
}
4. Vues
layouts.app.blade.php :
Copy code
<!-- resources/views/layouts/app.blade.php -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Laravel Bookstore</title>
<!-- Ajoutez ici vos liens CSS, scripts, etc. -->
</head>
<body>
<header>
<h1>Laravel Bookstore</h1>
<nav>
<ul>
<li><a href="/books">Liste des livres</a></li>
<li><a href="/books/ajouter">Ajouter un livre</a></li>
</ul>
</nav>
</header>
<main>
@yield('content')
</main>
<footer>
<!-- Ajoutez ici le contenu du pied de page -->
</footer>
<!-- Ajoutez ici vos scripts JS, etc. -->
</body>
</html>
ajouterBook.blade.php :
<!-- resources/views/ajouterBook.blade.php -->
@extends('layouts.app')
@section('content')
<h2>Ajouter un livre</h2>
<form action="/books/ajouter" method="post">
@csrf
<label for="titre">Titre :</label>
<input type="text" name="titre" required><br>
<label for="genre">Genre :</label>
<input type="text" name="genre" required><br>
<label for="author">Auteur :</label>
<input type="text" name="author" required><br>
<label for="prix">Prix :</label>
<input type="text" name="prix" required><br>
<button type="submit">Ajouter</button>
</form>
@endsection
ListerBooks.blade.php :
<!-- resources/views/ListerBooks.blade.php -->
@extends('layouts.app')
@section('content')
<h2>Liste des livres</h2>
<ul>
@foreach($books as $book)
<li><a href="/books/{{ $book->numero }}">{{ $book->titre }}</a></li>
@endforeach
</ul>
@endsection
ModifierBooks.blade.php :
<!-- resources/views/ModifierBooks.blade.php -->
@extends('layouts.app')
@section('content')
<h2>Modifier le livre</h2>
<form action="/books/modifier/{{ $book->numero }}" method="post">
@csrf
<label for="titre">Titre :</label>
<input type="text" name="titre" value="{{ $book->titre }}" required><br>
<label for="genre">Genre :</label>
<input type="text" name="genre" value="{{ $book->genre }}" required><br>
<label for="author">Auteur :</label>
<input type="text" name="author" value="{{ $book->author }}" required><br>
<label for="prix">Prix :</label>
<input type="text" name="prix" value="{{ $book->prix }}" required><br>
<button type="submit">Modifier</button>
</form>
@endsection
DetailBook.blade.php :
<!-- resources/views/DetailBook.blade.php -->
@extends('layouts.app')
@section('content')
<h2>Détails du livre</h2>
<p>Titre : {{ $book->titre }}</p>
<p>Genre : {{ $book->genre }}</p>
<p>Auteur : {{ $book->author }}</p>
<p>Prix : {{ $book->prix }}</p>
<a href="/books">Retour à la liste</a>
@endsection
RechercherBooksParTitre.blade.php :
<!-- resources/views/RechercherBooksParTitre.blade.php -->
@extends('layouts.app')
@section('content')
<h2>Rechercher des livres par titre</h2>
<form action="/books/rechercher-par-titre" method="post">
@csrf
<label for="titre">Titre :</label>
<input type="text" name="titre" required><br>
<button type="submit">Rechercher</button>
</form>
<h3>Résultats de la recherche</h3>
<ul>
@foreach($books as $book)
<li><a href="/books/{{ $book->numero }}">{{ $book->titre }}</a></li>
@endforeach
</ul>
@endsection
RechercherBooksParAuthor.blade.php :
<!-- resources/views/RechercherBooksParAuthor.blade.php -->
@extends('layouts.app')
@section('content')
<h2>Rechercher des livres par auteur</h2>
<form action="/books/rechercher-par-auteur" method="post">
@csrf
<label for="author">Auteur :</label>
<input type="text" name="author" required><br>
<button type="submit">Rechercher</button>
</form>
<h3>Résultats de la recherche</h3>
<ul>
@foreach($books as $book)
<li><a href="/books/{{ $book->numero }}">{{ $book->titre }}</a></li>
@endforeach
</ul>
@endsection
5. Routes
Définir les routes dans le fichier routes/web.php :
// routes/web.php
use App\Http\Controllers\BookController;
Route::get('/books', [BookController::class, 'lister']);
Route::get('/books/{numero}', [BookController::class, 'detail']);
Route::get('/books/ajouter', function () {
return view('ajouterBook');
});
Route::post('/books/ajouter', [BookController::class, 'ajouter']);
Route::get('/books/modifier/{numero}', [BookController::class, 'modifier']);
Route::post('/books/modifier/{numero}', [BookController::class, 'mettreAJour']);
Route::get('/books/supprimer/{numero}', [BookController::class, 'supprimer']);
Route::post('/books/rechercher-par-titre', [BookController::class, 'rechercherBooksParTitre']);
Route::post('/books/rechercher-par-auteur', [BookController::class, 'rechercherBooksParAuthor']);