Table des matières

Laravel

Contrôleur ressource

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)

Création du contrôleur

  php artisan make:controller PhotoController --resource

Configuration des routes

dans /routes/web.php

  Route::resource('photos', PhotoController::class);

Cette ligne nous permet de créer les routes suivantes

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>

Routes partielles

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'
]);

Exemple de contrôleur

On va utiliser le modèle Photo, donc au début du fichier de contrôleur, il faut ajouter

  use App\Photo;

index()

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'));
}

show()

public function show(Photo $photo)
{
    return view('photos.show', compact('photo'));
}

create()

Affiche le formulaire pour créer un enregistrement

public function create()
{
    return view('photos.create');
}

store()

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'];
}

edit()

Affiche le formulaire pour modifier un enregisrement

public function edit(Photo $photo)
{
    return view('photos.edit', compact('photo'));
}

update()

Met à jour un enregistrement

public function update(Photo $photo)
{
    $photo->update(request()->all());
    
    return redirect('/photos');
}

destroy()

Supprime un enregistrement

public function destroy(Photo $photo)
{
    $photo->delete();
    
    return redirect('/photos');
}