Documentation ⇒ https://laravel.com/docs/5.8/controllers#resource-controllers
Créer un contrôleur ressource permet d'économiser quelques lignes de code et de profiter des recommandations de Laravel en respectant le système CRUD (Create, Read, Update, Delete)
php artisan make:controller PhotoController --resource
dans /routes/web.php
Route::resource('photos', PhotoController::class);
Les méthodes PUT
, PATCH
et DELETE
n'existent pas par défaut.
Si on veut les utiliser dans une vue, il faut l'indiquer comme ceci:
<form action="/foo/bar" method="POST"> @method('PUT') </form>
Si on ne souhaite pas utiliser toutes les méthodes, on peut l'indiquer dans le fichier de route
Route::resource('photos', 'PhotoController')->only([ 'index', 'show' ]); Route::resource('photos', 'PhotoController')->except([ 'create', 'store', 'update', 'destroy' ]);
On va utiliser le modèle Photo, donc au début du fichier de contrôleur, il faut ajouter
use App\Photo;
Retrouve tous les enregistrements des photos dans la base de données et les envoi à la vue qui est dans /resources/views/photos/index.blade.php
public function index() { $photos = Photo::all(); return View('photos.index', compact('photos')); }
public function show(Photo $photo) { return view('photos.show', compact('photo')); }
Affiche le formulaire pour créer un enregistrement
public function create() { return view('photos.create'); }
Enregistrement des informations dans la base de données
public function store(Request $request) { Photos::create(request()->all()); return redirect ('/photos'); }
Remarque en utilisant request()→all()
, on va enregistrer toutes les entrées du formulaire.
Afin de protéger la base de données, il faut définir les colonnes qui ont le droit d'être enregistrer dans la base.
Pour cela, dans le modèle Photo
, il faut définir la variable $fillable
Exemple pour le model Photo
class Photo extends Model { protected $fillable = ['title', 'content']; }
Affiche le formulaire pour modifier un enregisrement
public function edit(Photo $photo) { return view('photos.edit', compact('photo')); }
Met à jour un enregistrement
public function update(Photo $photo) { $photo->update(request()->all()); return redirect('/photos'); }
Supprime un enregistrement
public function destroy(Photo $photo) { $photo->delete(); return redirect('/photos'); }