Créé en 2020 et modifié le 19 Oct 2020

Réservation d’une chambre

 

 

 

 

Partie 1 – disponibilités

Livrable gitlab : otelo/mission6/…

  • vérifier que la clef étrangère catégorie de la table chambre s’appelle categorie_id
  • afficher les chambres d’une catégorie
class Chambre extends Model{
  public function categorie(){
    return $this->belongsTo('App\Categorie');
  }
}

class Categorie extends Model{
  public function chambres(){
  return $this->hasMany('App\Chambre');
}



dans controleur

$categorie = Categorie::where('id',3)->->firstOrFail();
//obtention des chambres
$chambres=$categorie ->chambres();
//renvoie vers vue puis foreach ou dd($categorie ->chambres())

//obtention de la categorie d'une chambre 
//$chambre = Chambre::where('id',1)->firstOrFail(); 
//$cat=$chambre->categorie;
  • réaliser l’URI GET disponibilites qui renvoie la liste des chambres disponibles selon la date de debut, la date de fin et la catégorie en JSON.

Chaque ligne devra faire apparaître le prix de base par jour et la description de la chambre. cf note pour réaliser obtenir toutes les chambre d’une catégorie

Route::get('/api',function () {
    return Response::json(array('name' => 'Steve', 'state' => 'CA'));
});

Partie 2 – recherche

Livrable gitlab : otelo/mission6/…

  • réaliser le formulaire de recherche d’une chambre selon la date de début, la date de fin et la catégorie de la chambre.
  • afficher la réponse. Chaque ligne devra faire apparaître le prix de base par jour  et la description de la chambre.

Partie 3 – réservation

Livrable gitlab : otelo/mission6/…

  • permettre la réservation d’une chambre et l’enregistrer en base de données

@create (formulaire de création)

@ReservationController@create
   $chambres = chambres ();
  return view('reservation.create', ['chambres ' => $chambres ]);



Route::get('reservation/new',[ReservationController::class, 'create'] )->name('reservation.create');


@reservation/create.blade.php
   @foreach($chambres as $chambre)

@store  (réception du formulaire create)

Route::post('reservation/store', [ReservationController::class, 'store'])->name('reservation.store');

@ReservationController@store

$reservation=new Reservation();
$reservation->description= $request->input('description');
$reservation->save();

return redirect()->route('zaza')->with('success','réservation enregistrée');;
@chambre/index.blade.php
  {{$reservation->title}}

Partie 4 – déploiement

Livrable gitlab : otelo/mission6/…

  • déployer l’application
  • réaliser le diagramme de déploiement
  • réaliser le diagramme des cas d’utilisation de votre application

 

 

 

Note :

@index

@ChambreController@index
   $chambres= Chambre::findAll();
  return view('chambre.index', ['chambres' => $chambres]);


Route::get('/chambres', [ReservationController::class, 'index'])->name('chambre.index');


@chambre/index.blade.php
  @foreach($categories as $categorie)

@create

@ChambreController@create
   $categories = Categories:all();
  return view('chambre.create', ['categories ' => $categories ]);


Route::get('chambre/new', [ReservationController::class, 'create'])->name('chambre.create');


@chambre/create.blade.php
   @foreach($categories as $categorie)

@store et Stockage d’image (réception du formulaire create)

input du formulaire pour le stockage d’image, ne pas oublier enctype au form

@chambre/create.blade.php

<form action="#" method="POST" enctype="multipart/form-data">
  <input type="file" name="image"/>
</form>

 

Route::post('chambre/store', [ReservationController::class, 'store'])->name('chambre.store');

 

Lien symbolique entre dossier storage et dossier public du site pour que les images soient accessibles publiquement

php artisan storage:link
php artisan cache:clear

 

@ChambreController@store

$chambre=new Chambre();
$chambre->description= $request->input('description');


$image= $request->file("image");
$imageFullName = $image->getClientOriginalName();
//dd($imageFullName);
$imageName= pathinfo($imageFullName, PATHINFO_FILENAME);
//dd($imageName);
$imageExtension= $image->getClientOriginalExtension();
//dd($imageExtension);
$file = time() . '_' . $imageName . '.' .  $imageExtension;

$image->storeAs('public/chambres/',$file);
$chambre->image = $file;
$chambre->save();

return redirect()->route('zaza')->with('success','chambre enregitrée');

 

@chambre/index.blade.php
<img class="mon-image"
     src="/storage/chambres/{{$chambre->image}}"
     alt="{{$chambre->title}}">

 

@edit

@chambre/index.blade.php
 <a href="{{route('chambre.edit', $chambre->id)}}">


@ChambreController@edit
  $chambre= Chambre::find($id);
  return view('chambre.edit', ['chambre' => $chambre]);


Route::get('chambre/{id}/edit', [ReservationController::class, 'edit'])->name('chambre.edit');


@chambre/edit.blade.php
  {{$chambre->title}}



@update et Stockage d’image (réception du formulaire edit)

Route::put('chambre/{id}/update', [ReservationController::class, 'update'])->name('chambre.update');


@chambre/edit.blade.php
    <form action="{{route('chambre.update', $chambre->id)}} method="POST"
    @csrf
    @method("PUT")


@ChambreController@update 
  $chambre= Chambre::find($id); 
  $chambre->title()=$request->input('title');
  //...
  if($request->file('image'){
      $image= $request->file("image"); 
      $imageFullName = $image->getClientOriginalName(); 
      $imageName= pathinfo($imageFullName, PATHINFO_FILENAME); 
      $file = time() . '_' . $imageName . '.' . $imageExtension; $image-     >storeAs('public/chambres/',$file); 
      $chambre->image = $file;
  
  }

  $chambre->save();
  return redirect()->route('chambre.index');

@destroy

Route::delete('chambre/{id}/destroy', [ReservationController::class, 'destroy'])->name('chambre.destroy');


@lien de suppression
<a href="{{route('chambre.destroy', $chambre->id)}}"></a>


@ChambreController@destroy
  $chambre= Chambre::find($id); 
  $chambre->delete();
  return redirect()->route('chambre.index')->with('success','chambre supprimée');

 

Variable d’environnement

env('DB_DATABASE')