Créé en 2020 et modifié le 18 May 2021
Créé en 2020 et modifié le 18 May 2021
Réservation d’une chambre
Intro
- réaliser le diagramme de déploiement de l’application
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.
public function dispo() { $chambres = DB::select('select chambre.id, nbCouchage, porte, etage,libelle ,baignoire from chambre inner join categories on chambre.categorie_id = categories.id where chambre.categorie_id=? and chambre.id not in (select reservation.idChambre from reservation where dateD<? or dateF>?)', [3,'2021-03-03', '2021-03-01'] ); // return view('chambres',['chambres' => $chambres]); return response()->json($chambres); }
- 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
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)
@[email protected] $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');
@[email protected] $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}}
Note :
@index
@[email protected] $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
@[email protected] $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
@[email protected] $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)}}"> @[email protected] $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") @[email protected] $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> @[email protected] $chambre= Chambre::find($id); $chambre->delete(); return redirect()->route('chambre.index')->with('success','chambre supprimée');
Variable d’environnement
env('DB_DATABASE')