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 }}

+
+ @csrf +

Complétez le formulaire. Les champs marqué par * sont obligatoires

+
+ Entrez votre commentaire : +
+ + + @error('COM_AUTEUR') +
{{ $message }}
+ @enderror +
+
+
+ + + @error('COM_CONTENU') +
{{ $message }}
+ @enderror +
+
+ +
+
+ +
+
+ +
+
+ +
+
+@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