Document Details

IrreplaceableFern864

Uploaded by IrreplaceableFern864

ENIS

Amal BOUAZIZ

Tags

Laravel PHP Framework Web Development Software Development

Summary

Ce document détaille la création d'un projet LARAVEL.  Il explique les bases du framework, les concepts et l'organisation. 

Full Transcript

FRAMEWORK LARAVEL Présenté par: Amal BOUAZIZ Expert en développement web CHAPITRE 1 Les bases de Laravel 1. Introduction 2. Présentation & installation 3. Architecture MVC 4. Routage 5. Les contrôleurs 6. Les vues : Blade 7. Convention de nommage CHAPITRE 1 Les bases de Laravel 1. Introductio...

FRAMEWORK LARAVEL Présenté par: Amal BOUAZIZ Expert en développement web CHAPITRE 1 Les bases de Laravel 1. Introduction 2. Présentation & installation 3. Architecture MVC 4. Routage 5. Les contrôleurs 6. Les vues : Blade 7. Convention de nommage CHAPITRE 1 Les bases de Laravel 1. Introduction 2. Présentation & installation 3. Architecture MVC 4. Routage 5. Les contrôleurs 6. Les vues : Blade 7. Convention de nommage Introduction L’objectif de ce cours est d’apprendre le Framework Laravel d’une manière progressive et de développer ensemble un projet site web vitrine FRONT/BACK. Les connaissances requises pour pouvoir suivre ce cours sont : L'architecture MVC (Model View Controller) La POO en PHP (Programmation Orientée Objet) Et bien évidemment être déjà à l'aise avec les langages HTML/CSS/JS et PHP Native CHAPITRE 1 Les bases de Laravel 1. Introduction 2. Présentation & installation 3. Architecture MVC 4. Routage 5. Les contrôleurs 6. Les vues : Blade 7. Convention de nommage Présentation & installation C’est quoi Laravel? - Laravel est un framework PHP open source puissant et populaire, qui propose des outils pour construire des applications et des sites web. - Il regroupe les meilleures librairies pour chaque fonctionnalité nécessaire au développement de votre projet. - Il a été construit en se basant sur le framework Symfony. - Créé par Taylor Otwell qui a publié sa première version Laravel 1 en juin 2011 Présentation & installation Pourquoi Laravel? Laravel est si populaire pour les développeurs et les entreprises : Moteur de modèle : Laravel fournit aux développeurs Web un moteur de modèle « BLADE » qui est léger et facile à utiliser. Artisan : est une CLI (Command Line Interface) qui aide les développeurs à construire leurs applications web rapidement. Elle est utile pour générer les bases de données et créer les fichiers MVC de base. ORM(Object Relational Mapping) Eloquent : Assure l’intéraction avec la base de données SQL. Architecture MVC: Laravel est basé sur l’architecture MVC qui améliore les performances des applications web à travers la repartition des traitements sur plusieurs couches. Sécurité: Laravel aident à protéger le code d’une application contre divers types d’attaques telles que les injections SQL, les vulnérabilités XSS, la falsification de requêtes intersites (CSRF), etc… Présentation & installation Environnement de travail : - Un éditeur (ex : VS CODE) - Un navigateur web - PHP V8.1 ou supérieur - Un serveur web APACHE - Un serveur de base de données MYSQL Composer: https://getcomposer.org/download/ Composer est un outil de gestion des dépendances de packages en PHP. Il vous permet de gérer les bibliothèques dont dépend votre projet et il les gérera (installer/mettre à jour) Présentation & installation Environnement de travail : 1ere méthode : Installation de l’environnement de développement PHP/MYSQL (ex : XAMPP, WAMP SERVER) - Composer - Terminal (cmd) Présentation & installation Environnement de travail : 2eme méthode (Recommandée) : - Installation de l’environnement de développement PHP/MYSQL LARAGON Présentation & installation Avant de commencer l’installation, vérifier que votre composer est bien installé : ouvrez votre terminal et tapez la commande : composer –v Commençons donc par créer un nouveau projet Laravel. 3 méthodes sont possibles pour créer un nouveau projet LARAVEL : 1ère Méthode : Installation de laravel avec COMPOSER Tout en restant sur votre terminal dirigez-vous vers votre dossier à la racine de votre serveur. D:\laragon\www Et tapez : composer create-project laravel/laravel laravel1 Cette commande vous installera automatiquement la dernière version stable de Laravel Présentation & installation 2ème Méthode : Installation automatique à partir de LARAGON Présentation & installation 3ème Méthode : Installation de LARAVEL avec laravel installer Tout en restant sur votre terminal dirigez-vous vers votre dossier à la racine de votre serveur. D:\laragon\www 1- Installer globalement l’installeur avec composer Composer global require laravel/installer 2- Pour créer le projet LARAVEL il suffit de taper : laravel new example-app Présentation & installation comment je teste l’accès à mon projet ? utiliser la commande suivante dans votre terminal : cd laravel1 Puis exécuter la commande : php artisan serve copier/coller le lien, que la console vous renvoie, dans votre navigateur (http://127.0.0.1:8000) Vous devez voir cette page => Cela indique que votre projet Laravel est bien installé! Présentation & installation Organisation d’un projet LARAVEL : Après avoir tout installé nous pouvons voir que le dossier « laravel1 » a bien été créé et voici ce que l’on y trouve à l’intérieur : /app : est le dossier où se trouve le cœur de votre application web (controllers, models, middlewares, facades, providers, helpers etc…) /config : vos fichiers de configurations d’application, authentification, namespace, mails, base de données etc… /database : Vous y trouverez notamment vos migrations (qui permettent de gérer votre base de données avec un système de versioning) ainsi que les seeders et factories (pour tester votre base de données avec des fake data). Présentation & installation /public : par convention comme pour la majorité des frameworks il s’agit du seul dossier accessible depuis le serveur où les fichiers sont accessibles depuis votre site (images, feuilles de style et scripts principalement). /resources : vos assets de feuilles de style (en sass) et fichiers JS, les fichiers de langues si vous désirez un site multi-langual et l’ensemble de vos vues. /routes : vous trouverez notamment le fichier web.php qui vous permettra de définir l’ensemble des routes de votre application. Présentation & installation /.env = étroitement lié au fichier /config/app.php , il définit l’environnement de l’application (base de données utilisées, nom de l’application etc…) composer.json : il s’agit du fichier permettant à Composer de gérer les dépendances de l’application. Présentation & installation Les autres dossiers et fichiers sont moins importants à connaitre pour l’instant, je ne vous demanderai pas de vous en servir, mais à titre d’information : /bootstrap : démarrage de l’app. /storage : dossier de stockage. /tests : tests unitaires (pour éviter de tester manuellement l’application à chaque fois). /vendor : Ensemble des dépendances externes. Voilà ! Ceci est l’architecture de Laravel et votre premier pas dans la compréhension de sa logique! CHAPITRE 1 Les bases de Laravel 1. Introduction 2. Présentation & installation 3. Architecture MVC 4. Routage 5. Les contrôleurs 6. Les vues : Blade 7. Convention de nommage Architecture MVC Laravel utilise une architecture dite MVC (Model – View – Controller) Architecture MVC Le model contient les données et leur logique. La view contient la présentation graphique à renvoyer à l’utilisateur. Le controller traite les actions utilisateur (via des requêtes), demande au modèle d’effectuer les changements, puis passe les données à la vue. CHAPITRE 1 Les bases de Laravel 1. Introduction 2. Présentation & installation 3. Architecture MVC 4. Routage 5. Les contrôleurs 6. Les vues : Blade 7. Convention de nommage Routage C’est quoi une route ? Dans Laravel, les routes définissent comment les URL de votre application sont associées à des actions spécifiques dans les contrôleurs ou à des fonctions anonymes. Les routes peuvent être définies pour différents types de requêtes HTTP GET POST PUT DELETE et elles sont généralement configurées dans le fichier de route (web.php) situé dans le dossier routes/ Routage Quels sont les fichiers à l’origine de cette page ? Pour cela, dirigeons nous vers le fichier web.php situé dans le dossier « routes/ ». Route::get('/', function() { return view('welcome'); }); Nous pouvons voir que la route ‘/’ return une methode view() avec comme paramètre 'welcome’. Qu’est-ce-que cela veut dire ? Cela veut dire que pour la route ‘/’ retourne une vue appelé welcome. Qui se trouve plus précisément dans resources/views/welcome.blade.php (Blade étant le moteur de template utilisé par Laravel, nous verrons cela plus tard). Routage Pour créer une route, il faut ainsi appeler la classe Route avec la méthode HTTP souhaitée (get par exemple). Indiquez à cette méthode l’URI concernée et le retour à afficher pour le visiteur comme dans l’exemple ci-dessous : Route::get(‘home', function () { return view(‘home'); }); - Ecrire ce code source dans le fichier routes/web.php - Développer une vue dans le dossier : ressources/views/home.blade.php qui contient le code html suivant : Hello World Tester votre route dans le navigateur : http://127.0.0.1:8000/home Routage Différentes méthodes utilisées avec Route : get : Ceci est principalement utilisé pour récupérer les données du serveur, sans modifier les données et les renvoyer à l’utilisateur. post : Cela peut être utilisé uniquement pour envoyer des données, pour un traitement ultérieur (cela pourrait être la validation des données, comme dans le processus de connexion, inscription…). Il est considéré comme plus sûr que GET pour l’envoi de données sensibles. put : fonctionne comme le POST dans le sens où il vous permet d’envoyer des données au serveur, généralement pour mettre à jour une ressource existante au lieu de la créer. delete : fonctionne comme le POST dans le sens où il vous permet d’envoyer des données au serveur, généralement pour supprimer une ressource existante. Routage Route nommée : Laravel fournit un moyen simple de nommage de vos routes par lequel nous n’avons pas à coder en dur l’URI dans nos vues Blade. Route::get(‘home', function () { return view(‘home'); })->name('home’); Générer une URL à l’aide d’une route nommée Lien : Redirection dans un contrôleur : Redirect::route('home'); CHAPITRE 1 Les bases de Laravel 1. Introduction 2. Présentation & installation 3. Architecture MVC 4. Routage 5. Les contrôleurs 6. Les vues : Blade 7. Convention de nommage Les contrôleurs Nous allons voir comment relier une route à un Controller plutôt que d'utiliser une fonction anonyme en deuxième paramètre de nos méthodes de routing. Pour commencer créons un nouveau controller php artisan make:controller HomeController vos controllers se situent dans le dossier app/Http/Controllers Nous allons ensuite créer une nouvelle méthode à notre class HomeController que l'on nommera index() public function index() { return view('home'); } Les contrôleurs Maintenant nous devons faire le lien entre notre fichier web.php et notre Controller. Pour commencer créons la route dans web.php Route::get('/', [HomeController::class, 'home'])->name('home’); Si vous retournez et que vous tapez dans votre terminal la commande : php artisan route:list La nouvelle route sera ajouté Et on peut la tester : http://127.0.0.1:8000/ Nous rencontrons un problème : laravel ne trouve pas le controller! Correction => ajouter en haut dans web.php : use App\Http\Controllers\HomeController; Les contrôleurs Le passage des paramètres dans les routes : On peut utiliser un paramètre pour une route qui accepte des éléments variables en utilisant des accolades. Exemple : Route::get(‘hello/{n}', [HomeController::class, 'hello'])->name('hello’); Ce paramètre sera récupéré dans la méthode du Controller : Public function hello($name){ Return view(‘hello’,compact(‘name’)); } Il existe deux type de paramètres qu’on peut passer dans la route : Paramètres obligatoires et paramètres facultatifs Les contrôleurs Le passage de paramètre obligatoire : Par exemple, si vous souhaitez capturer l’ID utilisateur dans l’URL lorsque vous souhaitez obtenir les détails de l’utilisateur, vous pouvez vous référer aux pratiques suivantes : Route::get('user/{id}', [HomeController::class, 'user'])->name(‘home.user'); Route::get(‘article/{title}/comment/{comment}', [HomeController::class, ' article’]) ->name(‘ home.article'); Les contrôleurs Le passage de paramètre facultatif : Parfois, vous devez spécifier des paramètres de routage, mais les paramètres ne sont pas obligatoires, ? peut être utilisé à ce moment. Route::get(‘product/{n?}', [HomeController::class, ‘product'])->name(‘home.product'); Ce paramètre sera récupéré dans la méthode du Controller : Public function product($name=null){ Return view(‘product’,compact(‘name’)); } Les contrôleurs Maintenant que nous savons récupérer des données dans notre controller, voyons comment passer des données depuis ce controller vers notre view. Return view (‘nomdelavue’,[‘nomvar’=>$variable]); Return view(‘nomdelavue’,compact(‘nomvar’)); Une foisles paramètres transmis vous devez les afficher dans votre vue. Vous ouvrez donc les accolades utilisées par le langage Blade et vous demandez d’afficher la variable : {{ $nomvar }} Les contrôleurs Exercice1 : Développer le controller avec la méthode nécessaire pour récupérer les deux paramètres date et num de la route suivante et les afficher dans une vue. Route::get('/{date}/{num}', [OrderController::class, 'show'])->name('order.show'); Exercice2 : Développer un site web statique de 4 pages (Accueil, presentation, produits et contact). - Page d’accueil avec la route : / => qui affiche la chaine : c’est la page d’accueil - Page présentation : /about => qui affiche la chaine : c’est la page présentation - Page produit : /produits => qui affiche la chaine : c’est la page produit - Page contact : /contact : qui affiche un formulaire de contact - traitement contact : /contact/save : qui récupère du formulaire de contact e t affiche les infos Chapitre 1 Les bases de Laravel 1. Introduction 2. Présentation & installation 3. Architecture MVC 4. Routage 5. Les contrôleurs 6. Les vues : Blade 7. Convention de nommage Blade - Blade est le moteur de template utilisé par Laravel. - permettre d’utiliser du php sur notre vue mais d'une manière assez particulière. - Pour créer un fichier qui utilise le moteur de template Blade il vous faut ajouter l'extension ".blade.php". - Comme nous l'avons vu dans la présentation de l'architecture de Laravel, les fichiers de vos vues se situent dans le dossier resources/views. Blade Comment ecrire un commentaire? {{-- ceci est un commentaire --}} Comment déclarer une variable? @php $nom_var = “bonjour" @endphp Comment écrire des boucle FOREACH? @foreach ($users as $user) This is user {{ $user->id }} @endforeach Blade Comment lire des variables dans une vue blade? {{ $nomvar }} Comment écrire des boucles FOR? @for ($i = 0; $i < 10; $i++) La valeur actuelle est {{ $i }} @endfor Comment écrire des boucle FOREACH? @foreach ($users as $ind=>$user) This is user {{ $ind.$user->id }} @endforeach Blade Comment écrire des boucle FORELSE? @forelse ($users as $user) This is user {{ $user->id }} @empty aucunutilisateur @endforelse Blade Comment écrire If elseif else? @if (count($enregistrements) === 1) J'ai un enregistrement! @elseif (count($enregistrements) > 1) J'ai plusieurs enregistrements! @else Je n'ai aucun disque enregistrement! @endif Blade Comment verifier les variables avec empty et isset? @isset($enregistrements) // $enregistrements est défini... @endisset @empty($enregistrements) // $enregistrements est vide... @endempty Blade Comment écrire Switch.. Case ? @switch($login_error) @case(1) Vérifier votre login! @break @case(2) Vérifier votre mot de passe! @break @default Une erreur s'est produite. Veuillez réessayer @endswitch Activité Énoncé : Créez une vue Blade qui affiche un tableau de notes en HTML à partir d'un tableau PHP fourni par le contrôleur : $notes=[17,15,9,12] Le tableau Html devra afficher : les numéros de note (1,2,3,4), la valeur des notes, la moyenne des notes sous le tableau et la mention basée sur la moyenne : $moyenne=somme des notes / nombre de note La mention est basé sur les conditions suivantes: ▪ Si la moyenne est >= 16 : "Très bien", ▪ Si la moyenne est >= 14 : "Bien", ▪ Si la moyenne est >= 12 : "Assez bien", ▪ Si la moyenne est >= 10 : « Passable", ▪ Sinon : « Refusé". Blade Heritage de BLADE : - Dans un projet LARAVEL nous pouvons créer un Template qui comporte la structure globale des pages, - il est déclaré comme parent dans les autres vue et il sera hérité par @extends() @extends('layouts.template') - Dans le Template on prévoit un emplacement @yield pour que les vues enfants puissent placer leur code. @yield('content') Blade EXEMPLE : template.blade.php @yield('header') @yield('content') @yield('footer') Blade page.blade.php @extends('template') @section('header') ceci est le header @endsection @section('content') ceci est le contenu @endsection @section('footer') ceci est le footer @endsection Blade Activité : 1- créer un dossier layouts dans resources/views/ 2- créer un fichier template.blade.php dans resources/views/layouts/ 3- copier ce code dans le fichier template : @yield('title') est utilisé pour afficher la valeur du titre App Name - @yield('title') @ yield('sidebar') est utilisé pour référencer la zone où on va afficher la valeur du sidebar @yield('sidebar’) @yield('content') est utilisé pour référencer la zone où on va afficher la valeur du contenu @yield('content') Blade @extends('layouts.template') étend la mise en page principale 3- créer un fichier page.blade.php dans resources/views/ @section('title', 'titre de la page') définit la valeur de la section de titre 4- copier ce code dans page : @section('sidebar') définit la section sidebar @extends('layouts.master') @section('title', ‘test titre') @endsection termine la section sidebar @section('sidebar') @section('content') définit la section de contenu nouveau contenu sidebar @endsection @endsection termine la section de contenu @section('content') ceci est le texte du contenu @endsection 5- créer la route nécessaire et tester Blade L’inclusion dans BLADE : - Dans un projet LARAVEL nous pouvons décomposer un Template en plusieurs fichiers (header.blade.php, menu.blade.php, footer.blade.php…) dans l’objectif de mieux organiser et aléger votre code source - utiliser @include() pour importer les parties du code dans le fichier du Template principal @include('layouts.head' ) @include('layouts.header' ) @include('layouts.menu' ) @yield('content' ) @include('layouts.footer' ) CHAPITRE 1 Les bases de Laravel 1. Introduction 2. Présentation & installation 3. Architecture MVC 4. Routage 5. Les contrôleurs 6. Les vues : Blade 7. Convention de nommage Convention de nommage Laravel suit certaines conventions de nommage qui aident à maintenir la cohérence et la lisibilité du code. Voici un aperçu des principales conventions de nommage dans Laravel : 1- Nom des classes : PascalCase (ou StudlyCaps) Exemples : Contrôleurs : UserController, ProductController Modèles : User, Order, Invoice 2- Nom des fichiers : Les fichiers suivent généralement le nom de la classe qu'ils contiennent, avec le même style PascalCase. Exemples : Contrôleur : UserController.php, ProductController.php Modèle : User.php, Order.php Convention de nommage 3- Nom des méthodes : camelCase Exemples : getUserName(), createOrder(), deleteProduct() 4- Nom des routes : controller.method Exemples : users.index (afficher la liste des utilisateurs) products.show (afficher un produit spécifique) orders.create (afficher le formulaire de création d'une commande) Convention de nommage 5- Nom des variables : camelCase Exemples : $userName, $orderTotal, $productId 6- Nom des tables de base de données : snake_case et pluriel Exemples : users, orders, product_categories 7- Nom des colonnes de base de données : snake_case et singulier Exemples : first_name, order_total, created_at Convention de nommage 8- Nom des clés étrangères : Convention de nom de la table au singulier suivi de _id. Exemples : user_id, order_id, product_id 9- Nom des relations Eloquent : camelCase Exemples : hasMany(), belongsTo(), hasOne() Dans le modèle User, une relation peut être nommée orders() si un utilisateur peut avoir plusieurs commandes. 10- Nom des migrations : snake_case Exemples : create_users_table.php, add_email_to_users_table.php Activité Exercice pratique : 1- Télécharger un template gratuit de site web 2- Integrer le template du site dans votre projet 3- décomposer votre template 4- developper 4 pages du site web : - page d’accueil - page présentation - page produits - page contact FRAMEWORK LARAVEL Chapitre 2 Présenté par: Amal BOUAZIZ Expert en développement web CHAPITRE 2 Base de données et CRUD 1. Création et configuration de base de données avec LARAVEL 2. Eloquent, ORM de LARAVEL 3. Les migrations de base de données dans LARAVEL 4. Les relations LARAVEL Eloquent 5. Génération des CRUDs 6. Les vues de CRUD sous LARAVEL 1- Création et configuration de base de données avec LARAVEL LARAVEL permet une intégration facile avec les BD en utilisant soit le langage SQL brut soit l’ORM Eloquent. LARAVEL utilise PDO (PHP Data Objects) pour gérer les requêtes SQL. 1- créer une base de données : ouvrir phpmyadmin de votre serveur et créer la base de données de votre projet LARAVEL 2- configurer une base de données dans LARAVEL : DB_CONNECTION=mysql DB_HOST=127.0.0.1 ouvrir le fichier.env sur la racine de votre projet et DB_PORT=3306 DB_DATABASE=laraveldb modifier le bloc suivant : DB_USERNAME=root DB_PASSWORD= 2- Eloquent, ORM de LARAVEL Eloquent présente l’ORM de base du framework LARAVEL, il gère toutes les interactions de base de données requises pour les opérations de CRUD. Pas besoin de coder des requêtes SQL. Avec Eloquent chaque table dans la base de données est gérée par un modèle. 2- Eloquent, ORM de LARAVEL Nous allons commencer par la création d’un model éloquent qui sera généré dans le dossier App/Models en utilisant la commande suivante : php artisan make:model Product -m -m ou --migration : cela génère aussi la migration - Allez dans le nouveau fichier de migration du model Product et ajoutez la déclaration des champs de votre table products 2- Eloquent, ORM de LARAVEL Nous allons commencer par la création d’un model éloquent qui sera généré dans le dossier App/Models en utilisant la commande suivante : Php artisan make:model Category -m -m ou --migration : cela génère aussi la migration - Allez dans le nouveau fichier de migration du model Produit et ajouter la déclaration des champs de votre table categories(id, nom,created_at, modified_at) 2- Eloquent, ORM de LARAVEL $table->string(‘nom’); $table->timestamps(); //cette ligne permet de créer les deux champs created_at et modified_at => Découvrir les différents types de champs 2- Eloquent, ORM de LARAVEL Différents type de champs : $table->string(); $table->longtext(); $table->double(); $table->dateTime(); $table->integer(‘’); $table->float(‘’); $table->boolean(‘’); 3- Les migrations de base de données dans LARAVEL Les migrations dans laravel présente un processus de gestion de votre base de données Pour créer une migration vous pouvez utiliser la commande suivante : php artisan make:migration create_products_table Les migrations seront générées dans le dossier databases/migrations et contiennent un horodatage qui permet au framework de déterminer l’ordre d’execution des migrations Exécuter les migration vous pouvez utiliser la commande suivante : php artisan migrate => table créée dans la base de données 3- Les migrations de base de données dans LARAVEL php artisan migrate présente plusieurs fonctionnalités : migrate:fresh supprime toutes les tables et relance la migration migrate:refresh initialise toutes les tables et relance la migration migrate:rollback annule la dernière migration migrate:status donne des informations sur les migrations 3- Les migrations de base de données dans LARAVEL Configuration des champs : $table->string(‘adresse’,255)->nullable(); // définir un champ varchar de taille 255 default null $table->string(‘email’,150)->unique(); // définir un champ varchar de taille 150 et unique $table->boolean(‘etat’)->default(0); Créer une clé étrangère : $table->unsignedBigInteger(‘category_id’); $table->foreign('category_id')->references('id')->on(‘categories')->onDelete('cascade'); 3- Les migrations de base de données dans LARAVEL Activité : - Faite la même chose pour la table produits(id, nom, photo, description, prix, #categorie_id) 1- générer le modèle et la migration 2- spécifier les champs de la table produits dans la migration 3- déclarer la clé étrangère category_id 4- créer la table dans la base de données protected $fillable = [ 5- définir les champs Fillable dans le model ‘nom', ‘photo', ‘description', ‘prix', ‘category_id' ]; 4- Les relations LARAVEL Eloquent One to One: - Exemple : user à un phone Pour définir cette relation : il suffit de créer une méthode phone() dans le modèle User qui retourne la methode hasOne() Et une méthode user() dans le modèle Phone qui retourne la methode belongsTo() class User extends Model class Phone extends Model { { public function phone() public function user() { { //return $this->hasOne(Phone::class); //return $this->belongsTo(User::class); return $this->hasOne('App\Models\Phone'); return $this-> belongsTo('App\Models\User'); } } } } 4- Les relations LARAVEL Eloquent One to Many: - Exemple : product et category Créer une méthode product() dans le modèle Category qui retourne la methode hasMany() Et une méthode category() dans le modèle Product qui retourne la méthode belongsTo() class Category extends Model class Product extends Model { { public function product() public function category() { { //return $this->hasMany(Product::class); //return $this->belongsTo(Category::class); return $this->hasMany('App\Models\Product'); return $this-> belongsTo('App\Models\Category'); } } } } 4- Les relations LARAVEL Eloquent Many to Many: - Exemple : etudiants et cours => coursetudiants //Création des modèles //Création de la table de pivot php artisan make:model Etudiant -m php artisan make:migration create_cour_etudiants_table php artisan make:model Cour --migration - Definir deux clés étrangères(etudiant_id, cour_id) dans la migration cour_etudiant class Etudiant extends Model class Cours extends Model { { public function cour() public function etudiant() { { // Un etudiant consulte un ou plusieurs cours. // Un cours est consulté par un ou plusieurs etudnts. return $this->belongsToMany(Etudiant::class); return $this->belongsToMany(Cour::class); } } } } 5- Génération des CRUDs - Après la création des models et des tables dans la base de données, nous sommes prêt maintenant pour générer les CRUD (controllers et vues) php artisan make:controller CategoryController --resource --model=Category Ou créer le tout à la fois (model, migration, controller) php artisan make:model Category -mcr - Dans le fichieir routes/web.php ajouter une route ressource Route::resource('categories','CategoryController'); - Pour afficher toutes les routes php artisan route:list - Nous remarquons que les routes du controller category seront générées 5- Génération des CRUDs - Si on ouvre le fichier CategoryController.php, nous allons trouvé 7 méthodes générées : index(), create(), store(), show(), edit(), update() et destroy() - Leurs contenu sera développé à la main en suivant un modèle, - Le code source des méthode se base sur l’ORM Eloquent 1- Méthode index() public function index() { $categories = Category::all(); return view('categories.index',compact('categories')); } 5- Génération des CRUDs 2- Méthode create() public function create() { return view('categories.create'); } 3- Méthode store() public function store(Request $request) { $request->validate([ 'nom' => 'required', ]); Category::create($request->all()); return redirect()->route('categories.index’) ->with('success','Categorie créé avec succès.'); } 5- Génération des CRUDs 4- Méthode show() public function show(Categorie $categorie) { return view('categories.show',compact('Categorie') ); } 5- Méthode edit() public function edit(Categorie $categorie) { return view('categories.edit',compact('categorie')); } 5- Génération des CRUDs public function update(Request $request, Categorie $categorie) 6- Méthode update() { $request->validate([ 'nom' => 'required', ]); $categorie->update($request->all()); return redirect()->route('categories.index') ->with('success','Categorie mise à jour avec succès'); } public function destroy(Categorie $categorie) 7- Méthode destroy() { $categorie->delete(); return redirect()->route('categories.index') ->with('success','categorie supprimé avec succès'); } 6- Les vues de CRUD sous LARAVEL Il nous reste que la création des vue avec le Template. Notre site e-commerce admet déjà une partie admin pour gérer les categorie, les produits, consulter les clients, consulter les commandes et les imprimer… Alors, dans ce cas on doit bien organiser notre dosseirs resources/views dans le quel on va séparer les vues de la partie client (site web) à part et les vues de la partie admin à part. Nous pouvons créer des dossiers pour organiser nos fichiers : front/ et back/ Vous trouvez dans ces liens des modèles de vue (copier/coller) https://apcpedagogie.com/les-operations-crud-avec-eloquent-laravel-2-3/ https://apcpedagogie.com/les-operations-crud-avec-eloquent-laravel-3-3/ Activité Développement de la partie administrative du site web : 1. Intégrer un Template admin (ex : adminLte) 2. développer la gestion des catégories 3. développer la gestion des produits FRAMEWORK LARAVEL Présenté par: Amal BOUAZIZ Expert en développement web CHAPITRE 3 Sécurité, Authentification & droits d’accès 1. Contrôle et sécurité des formulaires 2. Upload file 3. Les Sessions 4. Authentification 5. Droits d’accès et middleware 1- Contrôle et sécurité des formulaires La validation de formulaire est très importante pour protéger les données indésirables dans notre application. 1- au niveau du controller : Il faut déclarer les conditions nécessaires pour la validation des champs // Form validation $request>validate ([ ‘nom' => 'required|unique:categories', ‘photo'=>’image|required', ‘description' => 'required', ‘prix' => 'required', 2- au niveau de la vue create,blade,php 'adresse' => 'required' ]); //Autres exemple : 'nom' => 'required|min:5|max:20|alpha', 'passe' => 'required|min:6|max:10|alpha', 'confirmepasse' => 'required|same:passe' 1- Contrôle et sécurité des formulaires 2- au niveau de la vue create.blade.php : S’il y’a des messages d’erreurs, les afficher avant le formulaire : @if ($errors->any()) @foreach ($errors->all() as $error) {{$error}} @endforeach @endif 3- Message d’erreur avec chaque champ @error('nom') id}}">{{$category->nom}} @endforeach Input type file : photo: 2- Upload file 4- dans la vue index... {{ $produit->nom }} {{ $produit->categorie->nom }}... Activité Stratégie de sécurité : 1. Appliquer une stratégie de sécurité sur les formulaires 2. Développer la fonctionnalité upload file photos des produits 3. Afficher les photos dans la liste des produits 3- Les SESSIONS Le système de session est un mécanisme bien connu en php, il permet de partager des données d’une page à l’autre. Le fichier de configuration est stocké dans app/config/session.php Utiliser les méthodes de session dans laravel : 1- récupérer le contenu de la session : $data=session()->all(); 2- stockage d’un élément dans la session avec put (écrase l’ancienne valeur) : session()->put('nom_var', 'valeur'); 3- insérer une valeur dans un tableau dans la session avec push (garde l’ancien) : session()->push(‘panier’, [‘produit’=>‘clavier’,‘qte’=>5,’prix’=>25]); 4- recupérer une variable dans la session : session()->get(‘panier’); 3- Les SESSIONS 5- récupérer une valeur de la session et l’oublier : $data=session()->pull(‘id’,0); 6- supprimer un élément de la session : session()->forget(‘panier'); 7- vider la session : session()->flush(); 8- regénérer l’ID de la session : session()->regenerate(); 9- afficher l’ID de la session : session()->getId(); 10- vérification de l’existance d’une variable dans la session : if(session()->has(‘login’)){} 4- Authentification L’installation du module d’authentification est très facile Ce module utilise le model User L’installation génère automatiquement le controller, et les vue en exécutant les instructions suivante dans l’invite de commande : Composer require laravel/ui php artisan ui bootstrap --auth npm install npm -g npm run dev ----------------- php artisan route:list //pour decouvrir les nouvelle routes d’authentification Découvrez les nouvelles vues de l’authentification dans : views/auth Découvrez les controllers dans : Controllers/auth Découvrez la nouvelle route : Auth::routes(); Tester la route : /login - /register (ajouter un nouveau utilisateur) 4- Authentification Ou installer le module d’authentification JETSTREAM : Etape1 : composer require laravel/jetstream Etape2 : php artisan jetstream:install livewire Etape 3 : php artisan migrate Etape4 : run npm install && npm run dev Etape5 : php artisan serve Tester la route : /login - /register (ajouter un nouveau utilisateur) 5- Droits d’accès et middleware - Les middlewares dans laravel sont responsables d’autoriser ou de bloquer l’accès au utilisateurs Nous avons déjà le middleware web déjà installé destiné pour le public Et le middleware auth, récemment installé sera utile pour autoriser que les utilisateur authentifié - Plusieurs methodes sont proposées pour affecter les droits d’accès : Route :: middleware (['auth']) -> group (function () { Route::resource('categories','CategorieController'); - Methode1 : dans routes/web.php, on associe plusieurs routes à un middleware Route::resource('produits','ProduitController'); }); 5- Droits d’accès et middleware - Methode2 : protéger les routes une par une : Route::resource('produits','ProduitController')->middleware('auth'); - Methode3 : protéger l’accès sur un controller en ajoutant dedans une méthode de constructeur : public function __construct(){ $this->middleware("auth"); } On peut tester aussi dans les views : @if(Route::has('register’)) @endif Activité Partie administrative du site web : 1. Sécuriser l’accès sur la partie admin 2. Appliquer un middleware sur les routes qui admettent une authentification Partie client du site web : 1. Développer la page produits dynamique 2. Développer l’envoi de mail à partir du formulaire de contact

Use Quizgecko on...
Browser
Browser