From cfb482ddf5a0464c6b92690df9f57239f21573f0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cl=C3=A9ment?=
Date: Mon, 12 May 2025 17:35:24 +0200
Subject: [PATCH] comment form
---
.../app/Http/Controllers/BilletController.php | 12 ++++--
.../Controllers/CommentaireController.php | 27 +++++++++++--
.../Http/Requests/StoreCommentaireRequest.php | 21 +++++++++-
laravel/config/logging.php | 6 +++
.../resources/views/errors/dberror.blade.php | 5 +++
laravel/resources/views/index.blade.php | 1 +
laravel/resources/views/vCommenter.blade.php | 40 +++++++++++++++++++
.../resources/views/vConfirmStore.blade.php | 5 +++
laravel/routes/web.php | 10 +++--
9 files changed, 115 insertions(+), 12 deletions(-)
create mode 100644 laravel/resources/views/errors/dberror.blade.php
create mode 100644 laravel/resources/views/vCommenter.blade.php
create mode 100644 laravel/resources/views/vConfirmStore.blade.php
diff --git a/laravel/app/Http/Controllers/BilletController.php b/laravel/app/Http/Controllers/BilletController.php
index 5eb7626..6185f40 100644
--- a/laravel/app/Http/Controllers/BilletController.php
+++ b/laravel/app/Http/Controllers/BilletController.php
@@ -7,6 +7,7 @@ use App\Http\Requests\UpdateBilletRequest;
use App\Models\Billet;
use Illuminate\Support\Facades\Log;
+use Illuminate\Database\QueryException;
class BilletController extends Controller
{
@@ -15,12 +16,11 @@ class BilletController extends Controller
*/
public function index()
{
- Log::info("coucou");
try {
$billets = Billet::all();
- } catch (\Illuminate\Database\QueryException $e) {
+ } catch (QueryException $e) {
Log::channel('projectError')->error('Erreur d\'accès à la base de données');
- return view('errors.unavailable');
+ return view('errors.dberror');
}
return view('index', compact('billets'));
}
@@ -47,7 +47,11 @@ class BilletController extends Controller
public function show(Billet $billet)
{
//
- $commentaires = $billet->commentaires;
+ try {
+ $commentaires = $billet->commentaires;
+ } catch (QueryException $e) {
+ return view('errors.dberror');
+ }
return view('vBillet', compact('billet', 'commentaires'));
}
diff --git a/laravel/app/Http/Controllers/CommentaireController.php b/laravel/app/Http/Controllers/CommentaireController.php
index 07a8a1d..4213d20 100644
--- a/laravel/app/Http/Controllers/CommentaireController.php
+++ b/laravel/app/Http/Controllers/CommentaireController.php
@@ -5,6 +5,8 @@ namespace App\Http\Controllers;
use App\Http\Requests\StoreCommentaireRequest;
use App\Http\Requests\UpdateCommentaireRequest;
use App\Models\Commentaire;
+use App\Models\Billet;
+use Illuminate\Support\Facades\Log;
class CommentaireController extends Controller
{
@@ -19,9 +21,20 @@ class CommentaireController extends Controller
/**
* Show the form for creating a new resource.
*/
- public function create()
+ public function create($idBillet)
{
- //
+ try {
+ $billet = Billet::findOrFail($idBillet);
+ }
+ catch (\Illuminate\Database\Eloquent\ModelNotFoundException $e) {
+ Log::channel('projectError')->error('Commentaire : Billet non trouvé');
+ return view('errors.unavailable');
+ }
+ catch (\Illuminate\Database\QueryException $e) {
+ Log::channel('projectError')->error('Erreur accès base de données');
+ return view('errors.dberror');
+ }
+ return view('vCommenter', compact('idBillet', 'billet'));
}
/**
@@ -29,7 +42,15 @@ class CommentaireController extends Controller
*/
public function store(StoreCommentaireRequest $request)
{
- //
+ try {
+ Commentaire::create($request->all());
+ }
+ catch (\Illuminate\Database\QueryException $e) {
+ Log::channel('projectError')->error('Insertion en base de données impossible');
+ return view('errors.dberror');
+ }
+ Log::channel('projectInfo')->info('Commentaire ajouté par : '.$request->ip());
+ return view('vConfirmStore');
}
/**
diff --git a/laravel/app/Http/Requests/StoreCommentaireRequest.php b/laravel/app/Http/Requests/StoreCommentaireRequest.php
index a0ebfe7..9c96918 100644
--- a/laravel/app/Http/Requests/StoreCommentaireRequest.php
+++ b/laravel/app/Http/Requests/StoreCommentaireRequest.php
@@ -11,7 +11,7 @@ class StoreCommentaireRequest extends FormRequest
*/
public function authorize(): bool
{
- return false;
+ return true;
}
/**
@@ -22,7 +22,24 @@ class StoreCommentaireRequest extends FormRequest
public function rules(): array
{
return [
- //
+ 'COM_AUTEUR' => ['required', 'alpha', 'max:100'],
+ 'COM_CONTENU' => ['required', 'string', 'max:200'],
+ ];
+ }
+
+ /**
+ * Get the error messages for the defined validation rules.
+ *
+ * @return array
+ */
+ public function messages() {
+ return [
+ 'COM_AUTEUR.required' => 'Le nom de l\'auteur est requis.',
+ 'COM_AUTEUR.alpha' => 'Le nom de l\'auteur ne doit contenir que des lettres.',
+ 'COM_AUTEUR.max' => 'Le nom de l\'auteur ne doit pas dépasser 100 caractères.',
+ 'COM_CONTENU.required' => 'Le contenu du commentaire est requis.',
+ 'COM_CONTENU.string' => 'Le contenu du commentaire doit être une chaîne de caractères.',
+ 'COM_CONTENU.max' => 'Le contenu du commentaire ne doit pas dépasser 200 caractères.',
];
}
}
diff --git a/laravel/config/logging.php b/laravel/config/logging.php
index 272a86b..584e602 100644
--- a/laravel/config/logging.php
+++ b/laravel/config/logging.php
@@ -132,6 +132,12 @@ return [
'path' => storage_path('logs/project.log'),
'level' => 'error',
],
+
+ "projectInfo" => [
+ 'driver' => 'single',
+ 'path' => storage_path('logs/project.log'),
+ 'level' => 'info',
+ ],
],
diff --git a/laravel/resources/views/errors/dberror.blade.php b/laravel/resources/views/errors/dberror.blade.php
new file mode 100644
index 0000000..237b6ca
--- /dev/null
+++ b/laravel/resources/views/errors/dberror.blade.php
@@ -0,0 +1,5 @@
+@extends('layout')
+
+@section('contenu')
+ Une erreur est survenue. Veuillez réessayer ultérieurement
+@endsection
\ No newline at end of file
diff --git a/laravel/resources/views/index.blade.php b/laravel/resources/views/index.blade.php
index 4d3ca26..1807dd2 100644
--- a/laravel/resources/views/index.blade.php
+++ b/laravel/resources/views/index.blade.php
@@ -22,6 +22,7 @@
@endforeach
{{ $billet->BIL_CONTENU }}
+ Ecrire un commentaire
@endforeach
@endsection
\ No newline at end of file
diff --git a/laravel/resources/views/vCommenter.blade.php b/laravel/resources/views/vCommenter.blade.php
new file mode 100644
index 0000000..c0353f5
--- /dev/null
+++ b/laravel/resources/views/vCommenter.blade.php
@@ -0,0 +1,40 @@
+@extends('layout')
+@section('contenu')
+ @php
+ $today = date('Y-m-d');
+ @endphp
+ Commenter le billet : {{ $billet->BIL_TITRE }}
+
+@endsection
diff --git a/laravel/resources/views/vConfirmStore.blade.php b/laravel/resources/views/vConfirmStore.blade.php
new file mode 100644
index 0000000..eecaf29
--- /dev/null
+++ b/laravel/resources/views/vConfirmStore.blade.php
@@ -0,0 +1,5 @@
+@extends('layout')
+
+@section('contenu')
+ Merci ! Nous avons bien enregistré votre commentaire.
+@endsection
\ No newline at end of file
diff --git a/laravel/routes/web.php b/laravel/routes/web.php
index 5dad9e4..ecfc3ad 100644
--- a/laravel/routes/web.php
+++ b/laravel/routes/web.php
@@ -2,9 +2,13 @@
use App\Http\Controllers\BilletController;
use Illuminate\Support\Facades\Route;
+use App\Http\Controllers\CommentaireController;
-Route::get('/', function () {
- return view('welcome');
-});
+Route::get('/', fn() => view('welcome'));
Route::resource('billets', BilletController::class);
+
+Route::resource('commentaires', CommentaireController::class);
+
+// Route to create a comment
+Route::get('commenter/{id}', [CommentaireController::class, 'create'])->name('commenter');
\ No newline at end of file