You are on page 1of 31
m school Accueil > Cours > Wilo Ahadi > Laravel : Créer le CRUD dun blog Laravel : Créer le CRUD d'un blog Un tutoriel pour mettre en place les opérations CRUD (Create, Read, Update, Delete) avec upload d'image dans un projet Laravel. Exemple dun blog. [lEnregistrer Commenter <{Partager__P Offrir un café ‘Auteur Domaine Technologies © Wilo A. Développement web Laravel, PHP, HTML Package - Arci Highlights 10% Snowhotel Kirkenes pshnmtecoo comical raavecipeadimage wo = Sommaire Introduction au CRUD + Base de données, migration et modéle du ‘RUD + Le controleur du CRUD + Les routes du CRUD Un tutoril HTML pour récupérer la valeur dune option et réciriger le cient vers option (URL) ‘choisie avec Alpinejs. > En savoir plus + Les opérations du CRUD # Introduction au CRUD Le terme CRUD est étroitement lié avec la gestion des données numériques. II fésume les opérations ou fonctions qu'un utilisateur a besoin pour créer et gérer les données. Lacronyme CRUD désigne les quatre opérations de base de Ia gestion et Ia persistance des données + «Create »: Créer une donnée + «Read » ou « Retrieve » : Lire ou retrouver une donnée + «Update » : Mettre & jour une donnée + «Delete » ou Destroy » : Supprimer une donnée Nous voulons voir dans ce guide comment créer un CRUD pour la gestion darticles d'un ‘blog avec upload image pour la couverture dlun article dans un projet Laravel pshnmtecoo comical raavecipeadimage 21 # Base de données, migration et modéle du CRUD Pour présenter un article de blog, appelons-le « post», nous avons besoin des informations suivantes dans une table de la base de données, appelons cette table « posts » + Unidentitiant: spost->ia + Untitre: spost-otitle + Une image de couverture: spost-spicture + Uncontenu: $post->content + La date de création et de mise a jour: spost->created_st et $post-rupdated_at Le schéma de ces informations doit étre décrit dans une migration. Nous pouvons générer le modale et le migration en exécutant la commande artisan suivante php artisan saketmodel Post -n Le paramétre « -m » permet de générer la migration « ._create_posts_table.php » du mod@le « Postphp ». Ce qui nous donne deux fichiers + lepp/Models/Post.php : Le modele qui représente la table darticles « posts » + [database/migrations/._create_posts_table.php : La migration ot décrire le schéma dela table « posts » Décrivons le schéma de la table « posts » dans la fonction up() de la migration ‘[databese/migrations/...creste_posts_table.php pshnmtecoo comical raavecipeadimage se esoaznaconae Lure: dere CUD ein ep oho use use 1luninate\patabase\Schena\slueprint use Tlluninate\support\Facades\schena; uminate\patabase\Migrations\Migration; class CreatePostsTable extends Migration { public function up() { Schena: sereate( "posts", function (Blueprint Stable) { stable->id)s Stable-ostring( title’); Stable->string( picture"); Stable->text(“content’ Seable-peinestanps(); Di Pour importer (migrer) la table « posts » dans la base de données, on exécute la commande artisan suivante php artisan migrate # Le contréleur du CRUD pshnmtecoo comical raavecipeadimage Larwo: Carle 6809 ein op Pour gérer les actions ou opérations du CRUD des articles (posts), nous avons besoin dun contréleur, appelons-le « PostController » Pour générer le contr6leur PostController.php en fassociant au modale ‘8pp/Models/Post.php, on exécute la commande artisan suivante php artisan make:controller PostController --resource --nodel-Post Les paramatres resource » permet dintégrer les méthodes du CRUD dans le controleur: index() . ereate() , store() , shon() , edit) » updated) et destroy() + «--modelePost » permet dimporter et injecter le mode Post dans les méthodes store() , show() , ed8t() , update() et destroy() Ce qui nous donne le code suivant ou fichier Japp/Http/Controllers/PostCntraller php Les routes "post.*” Route: :resource(*posts™, PostController: :class); Pour voir les nouvelles routes crées, exécutons la commande artisan suivante pshnmtecoo comical raavecipeadimage oor php artisan route:list Ce qui nous affiche les routes suivantes Méthode URI GET Iposts GET Iposts/create Post Iposts oer Iposts/{post) eT Iposts/{post) /edit PUT/PATCH Jposts/{post) DELETE Iposts/{post) ‘Action index create store show edit update destroy # Les opérations du CRUD Revenons sur les méthodes du controleur /app/Http/Controllers/PostControllerphp pour décrire les actions des routes 1. action « index » Nom de la route postsindex posts.create postsstore posts show postsedit posts.update postsdestroy Laméthode ou faction index() dont la route est nommée « posts.index » permet Gafficher une liste dune ressource. La « ressource » dont nous parlons ici est le « Post » (articte) pshnmtecoo comical raavecipeadimage Larne: Carle 6809 in op Méthode URI Action Nom de la route GET Iposts index postsiindex: Pour atficher la liste de Post, nous devons récupérer tous les posts de la base de données, puis les transmettre & la vue (template Blade) /resources/views/posts/index.blade,php : public function index() { 170m récupere tous les Post Sposts = Post: :latest()->get(); 1/ on transmet les Post a 1a we return view("posts.index", conpact(*posts")); Pour présenter les posts, on parcourt (avec la directive @forelse ou Gforesch ) la collection de Post sur la vue /resources/views/posts/index.blade,php Gextends("layouts.app") @section("title", “Tous les articles") @section("content") > «te> Besrf ~ @method("DELETE") submit” val “posts.destroy* ==> {{ route('posts.destroy', $post) } Suppriner’ Bendforeach « sin tecoo comical raavecipeadimage ast esoaznaconae Lure: dere CUD ein ep @endsection Sur cette vue, nous avons ajouté les liens suivants. + {{ route(‘posts.create’) }) pour eréer un nouveau Post + {{ route(‘posts.shon', $90st) }} pour afficher un Post. spost + {{ route(‘posts.edit', $90st) )} pour éditer un Post spost Et le formulaire pour supprimer un Post. spost {{ route( posts.destroy', $post) 2)" > cle= CSR token -=> eset mnethod value="DELETE"> --> Notezebian : Toutes les vues vont hérter ( gextends("1ayouts. app") ) du template principal ‘/resources/views/layouts/app-blade.php | htm pshnmtecoo comical cra avecsipeadmage set ctitlefyield("title") 1d("content") 2. action « create » La méthode ou faction create() dont Ie route est nommée « posts.create » permet de présenter un formulaire pour eréer une nouvelle resource Méthode URI ‘Action Nom de la route cer Iposts/ereate create —_posts.create Pour créer un nouveau Post, retournons la vue /resources/views/posts/editblede.php ot nous allons placer le formulaire dédition dun article public function create() { 11 On retourne la vue "/resources/views/posts/edit. blade. php’ return view(*posts.edit*) Le formulaire pour éditer un nouveau Post peut se présenter de la maniére suivante sur le vue /resources/views/posts/ecit.bledesphp pshnmtecoo comical raavecipeadimage seas or30 Lure: dere CUD ein ep Gextends("layouts.app") @section("title", "Créer un post") @section("content”)
Le token CSRF Besrf >
Gerror("title’ @enderror

@ icture" >Couverture
<1-+ Le message d'erreur pour “picture” --> @error(“picture") Genderror

>

Gendsect: LLaction du formulaire pointe vers la route nommée « posts.store ». 3. action « store » La mi jode ou action store(Request $request) dont la route est nommée « posts.store » permet denregistrer une nouvelle resource Méthode URI Action Nom de la route PosT Iposts store posts.store Nous allons procéder de la maniére suivante pour enregistrer un nouveau Post & partir de données qui proviennent du formulaire de Ie route « posts.create » 1.Valider les informations envoyées (Voir validation Leravel) 2. Uploader image de couverture pshnmtecoo comical raavecipeadimage saat esoaznaconae Lure: dere CUD ein ep 8. Enregistrer les informations du Post dans a table « posts » 4. Retourner vers liste de Post :la route « postsandex » Implémentions ce processus public function store(Request Srequest) ( 1/1, La validation Sthis-rvalidate(srequest, [ ‘title’ => ‘bail|required|string|max:255", icture” => ‘bail|required| image|nax:1024", content” => "bail|required’, // 2. On upload 1" image dans “/storage/app/public/posts” Schemin_inage request-»picture-»store(*posts”); 1/ 3, On enregistre les informations du Post Post: sereate( tle" => Srequest-otitle, ‘picture” => Schemin_inage, content” => $request-dcontent, // 4 On retourne vers tous les posts : route("posts. index") return redirect (route( “posts, index*)); Notez-bien 1L Pour ne pas tomber sur exception MassAssignmentException, nous devons indiquer les, propriétés $fi11able du modéle /app/Http/Models/Fost.php psshnmtecoo comical ra avecipeadimage eat cing src="{{ asset('storage/' Spost->picture) ))" alt="Inage de cowerture” st; { route("posts.index') })" title="Retourner aux articles” »Retoury
hidden” ane Titre
title) ? $post~ Benderror

@iF(ssset($post-rpicture)) >
"{{ asset ('storage/'.$post->picture) })" alt="image de couvert
Genderror

>

You might also like