Créé en 2020 et modifié le 30 Nov 2020

Créé en 2020 et modifié le 30 Nov 2020

Les formulaires avec Laravel

Partie 1 – création du formulaire de réservation

Livrable :  otelo/mission3/…

  • créer une vue createReservation
@extends('layouts.app')

@section('content')
<div class="container">
<form method="post" action="{{ route('reservation.store')}}">
  <div class="form-group">
    <label for="exampleInputEmail1">Email address</label>
    <input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" placeholder="Enter email">
    <small id="emailHelp" class="form-text text-muted">We'll never share your email with anyone else.</small>
  </div>
  <div class="form-group">
    <label for="exampleInputPassword1">Password</label>
    <input type="password" class="form-control" id="exampleInputPassword1" placeholder="Password">
  </div>
  <div class="form-check">
    <input type="checkbox" class="form-check-input" id="exampleCheck1">
    <label class="form-check-label" for="exampleCheck1">Check me out</label>
  </div>

<div class="form-group">
  <label for="sel1">Select list:</label>
  <select name="idperiode" class="form-control" id="sel1">
    <option value=1>basse</option>
    <option value=2>moyenne</option>
    <option value=3>haute</option>
  </select>
  </div>
  <button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
@stop

 

  • créer le contrôleur ReservationController
  • modifier la fonction create de ReservationController
return view('createReservation');
  • ajouter la route
Route::get('/newreservation',[ReservationController::class, 'create'] );
  • tester  le formulaire, une erreur concernant la vue est générée, supprimer l’action reservation.store dans le formulaire.
  • adapter le formulaire  pour contenir les champs nécessaires, on ne gérera pas les lignes de réservation (pas d’id chambre)

 

 

Partie 2 – récupération et enregistrement

Livrable :  otelo/mission3/…

  • ajouter l’action reservation.store dans le formulaire
  • ajouter la route de récupération
Route::post('/storereservation',[ReservationController::class, 'store'] )->name('reservation.store');
  • tester le formulaire puis mettre en forme le formulaire pour contenir les champs nécessaires, on ne gérera pas les lignes de réservation (pas d’id chambre)
  • ajouter à la fonction store du contrôleur
dd($request);
  • tester, une erreur 419 est générer, il faut gérer un token de session.
  • ajouter après la balise form, @csrf
<form method="post" action="{{ route('reservation.store')}}">
@csrf
  • observer le token généré dans le formulaire via le navigateur

  • vérifier les données dans l’affichage après validation du formulaire

 

  • créer le modèle Reservation.php avec les bons champs, attention aux majuscules des champs de la table
  • modifier la methode store de ReservationController.php, on verifiera que les input possède bien les names dated datef et idperiode.
$reservation=new Reservation();
     $dated=$request->input('dated');
     $datef=$request->input('datef');
     $idperiode=$request->input('idperiode');
     $reservation->dateD=$dated;
     $reservation->dateF=$datef;
     $reservation->idPeriode=$idperiode;
     $reservation->save();
     return redirect()->back();
  • tester, il manque deux champs, ajouter les puis re-tester.

Partie 3 – contrôle des saisies back-end

Livrable :  otelo/mission3/…

  • Modifier la fonction store de ReservationController pour indiquer que vos champs sont obligatoires
public function store(Request $request)
   {

       $validatedData = $request->validate([
             'dated' => 'required|date|after:tomorrow',
             'datef' => 'required|date|after:datef',
             'idperiode'=> 'required|between:1,3'
       ]);

       $reservation=new Reservation();
       ......

   }
  • Modifier la vue createReservation
@extends('layouts.app')

@section('content')
<div class="container">
@if($errors->any())
 <div class='alert alert-danger'>
   <ul>
    @foreach($errors->all() as $error)
        <li>{{$error}}</li>
    @endforeach    
   </ul>
@endif

<form method="post" action="{{ route('reservation.store')}}">
......
  • Tester

 

  • Modifier la vue createReservation
@extends('layouts.app')

@section('content')
<div class="container">



<form method="post" action="{{ route('reservation.store')}}">
@csrf
  <div class="form-group">
    <label for="exampleInputEmail1">date debut</label>
    <input name="dated" type="date" class="form-control @error('dated') is-invalid @enderror" id="exampleInputEmail1"  >
        @error('dated')
        <div class="alert alert-danger mt-2">
        {{$message}} mon message perso
        </div>
        @enderror
     </div>
  <div class="form-group">
    <label for="exampleInputPassword1">date fin</label>
    <input name="datef" type="date" class="form-control" id="exampleInputPassword1" >
    
  </div>
  <div class="form-group">
  <label for="sel1">Select list:</label>
  <select name="idperiode" class="form-control" id="sel1">
    <option value=1>basse</option>
    <option value=2>moyenne</option>
    <option value=3>haute</option>
  </select>
  </div>
  <button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
@stop
  • Tester
  • Valider les champs datef et idperiode coté back-end
  • Valider les champs coté front-end