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

1
php artisan make:controller PhotoController --resource

Configuration des routes

dans /routes/web.php

1
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:

1
2
3
<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

1
2
3
4
5
6
7
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

1
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

1
2
3
4
5
public function index()
{
    $photos = Photo::all();
    return View('photos.index', compact('photos'));
}

show()

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

create()

Affiche le formulaire pour créer un enregistrement

1
2
3
4
public function create()
{
    return view('photos.create');
}

store()

Enregistrement des informations dans la base de données

1
2
3
4
5
6
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

1
2
3
4
class Photo extends Model
{
    protected $fillable = ['title', 'content'];
}

edit()

Affiche le formulaire pour modifier un enregisrement

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

update()

Met à jour un enregistrement

1
2
3
4
5
6
public function update(Photo $photo)
{
    $photo->update(request()->all());
     
    return redirect('/photos');
}

destroy()

Supprime un enregistrement

1
2
3
4
5
6
public function destroy(Photo $photo)
{
    $photo->delete();
     
    return redirect('/photos');
}