# Examen Laravel - Gestion des Blogs
**Département Informatique**
**Module: Programmation Web**
**Durée: 1h45**
**Date: Le 29 Déc 2024**
Vous devez développer une application Laravel pour gérer des articles de blog et leurs commentaires.
Chaque article peut avoir plusieurs commentaires, et chaque commentaire peut être marqué comme
"approuvé" ou "en attente".
## Structure des Tables de la Base de Données
1. Table `posts`
- `id`: identifiant unique de l'article (clé primaire)
- `title`: titre de l'article
- `content`: contenu de l'article
- `published_at`: date de publication
- `created_at`, `updated_at`: timestamps
2. Table `comments`
- `id`: identifiant unique du commentaire (clé primaire)
- `post_id`: clé étrangère liée à [Link]
- `content`: contenu du commentaire
- `author`: auteur du commentaire
- `is_approved`: statut d'approbation
- `created_at`, `updated_at`: timestamps
## 1. Migrations
**Migration pour posts:**
```php
public function up()
Schema::create('posts', function (Blueprint $table) {
// TODO: Ajoutez les colonnes nécessaires pour la table posts
});
```
**Migration pour comments:**
```php
public function up()
Schema::create('comments', function (Blueprint $table) {
// TODO: Ajoutez les colonnes nécessaires pour la table comments
});
```
## 2. Modèles
**Modèle Post:**
```php
class Post extends Model
use HasFactory;
protected $fillable = []; // TODO: Complétez les champs remplissables
// TODO: Ajoutez la relation avec les commentaires
public function comments()
```
**Modèle Comment:**
```php
class Comment extends Model
use HasFactory;
protected $fillable = []; // TODO: Complétez les champs remplissables
// TODO: Ajoutez la relation avec l'article
public function post()
```
## 3. Routes
```php
// TODO: Ajoutez les routes nécessaires pour les articles et les commentaires
```
## 4. Contrôleurs
**PostController:**
```php
class PostController extends Controller
public function index()
// TODO: Récupérer tous les articles et les passer à la vue
public function show($id)
// TODO: Récupérer l'article et ses commentaires
public function create()
// TODO: Retourner la vue de création d'article
}
public function store(Request $request)
// TODO: Valider et sauvegarder le nouvel article
```
**CommentController:**
```php
class CommentController extends Controller
public function store(Request $request, $postId)
// TODO: Valider et créer un nouveau commentaire
public function update(Request $request, $id)
// TODO: Mettre à jour le statut d'approbation
```
## 5. Vues
**Vue posts/[Link]:**
```php
@extends('[Link]')
@section('content')
<!-- TODO: Créez la vue qui liste tous les articles -->
@endsection
```
**Vue posts/[Link]:**
```php
@extends('[Link]')
@section('content')
<!-- TODO: Créez la vue qui affiche un article et ses commentaires -->
@endsection
```
## Répartition des points:
- 4 points pour la gestion de la base de données (migrations)
- 4 points pour les modèles
- 3 points pour les routes
- 6 points pour les contrôleurs
- 3 points pour les vues
Total: 20 points
## Instructions supplémentaires:
1. Assurez-vous que toutes les validations nécessaires sont en place
2. Les commentaires doivent être approuvés avant d'être affichés
3. La date de publication doit être automatiquement définie lors de la création d'un article
4. Utilisez les bonnes pratiques de Laravel pour le nommage et l'organisation du code<