Alphorm.com Support de la Formation Red Hat Administrateur de Virtualization ...
M205developpemmetdigital123455555555.pdf
1. 120 heures
RÉSUMÉ THÉORIQUE – FILIÈRE DÉVELOPPEMENT WEB FULL STACK
Compétence M113 : « Développer en back-end »
Elaboré par :
Mariam MAHDAOUI Formatrice à ISTA Sidi Moumen CASABLANCA
Mohamed CHCHAB Formateur à ISTA BENGUERIR
2. Equipe de rédaction de
validation
Equipe de rédaction :
Mme MARIAM MAHDAOUI : Formatrice en
Développement Digital
M. MOHAMED CHCHAB : Formateur en
Développement Digital
3. SOMMAIRE 1. Découvrir le Framework PHP Laravel
Découvrir les notions fondamentales des Frameworks PHP
Préparer l’environnement de Laravel
2. Programmer avec Laravel
Installation des outils pour Laravel
Créer un nouveau projet Laravel
Architecture d’un projet Laravel
Laravel Artisan
Lancer un projet Laravel
3. Approfondir la programmation Laravel
Gérer la sécurité
Interagir avec la base de données
Manipuler l’ORM Eloquent
4. Administrer un site à l’aide d’un CMS
Manipuler les éléments essentiels d’un CMS
Personnaliser graphiquement un site à l’aide d’un CMS
Manipuler les outils avancés d’un CMS
4. 4
Copyright - Tout droit réservé - OFPPT
MODALITÉS PÉDAGOGIQUES
LE GUIDE DE
SOUTIEN
Il contient le
résumé théorique
et le manuel des
travaux pratiques
1
LA VERSION PDF
Une version PDF
est mise en ligne
sur l’espace
apprenant et
formateur de la
plateforme
WebForce Life
2
DES CONTENUS
TÉLÉCHARGEABLES
Les fiches de
résumés ou des
exercices sont
téléchargeables
sur WebForce Life
3
DU CONTENU
INTERACTIF
Vous disposez de
contenus
interactifs sous
forme d’exercices
et de cours à
utiliser sur
WebForce Life
4
DES RESSOURCES
EN LIGNES
Les ressources sont
consultables en
synchrone et en
asynchrone pour
s’adapter au
rythme de
l’apprentissage
5
5. Dans ce module, vous allez :
PARTIE 1
Découvrir le Framework PHP Laravel
• Découvrir les notions fondamentales des Frameworks PHP
• Préparer l’environnement de Laravel
20 heures
6. Ce que vous allez apprendre dans ce chapitre :
1. Présentation des Frameworks PHP
2. L’architecture MVC
3. Intérêt du Framework Laravel
02 heures
CHAPITRE 1
Découvrir les notions fondamentales des
Frameworks PHP
7. 7
Copyright - Tout droit réservé - OFPPT
PARTIE
1
01 - Découvrir les notions fondamentales des
Frameworks PHP
Présentation des Frameworks PHP
Qu’est-ce qu’un Framework web ?
Un Framework est une boite à outils pour aider les développeurs dans la réalisation de leurs tâches. Frame (cadre ) et work (travail).
Un Framework contient des composants autonomes qui permettent de résoudre les problèmes souvent rencontrés par les développeurs (CRUD, arborescence, normes,
sécurités, etc.).
Un Framework n’est pas uniquement une boite à outils. Il peut aussi désigner une méthodologie.
Un framework est donc perçu comme un squelette, regroupant chaque os et articulations (ici composants/librairies) de manière harmonieuse mais surtout de manière
fiable !
Pourquoi utiliser un framework ?
L’objectif de l’utilisation d’un Framework est de :
- maximiser la productivité du développeur qui l’utilise.
- faciliter la maintenance du l’application Web réalisée.
Voici les trois raisons à utiliser un Framework :
• Rapidité : le Framework permet un gain de temps et une livraison beaucoup plus rapide qu’un développement à zéro.
• Organisation : l’architecture d’un Framework favorise une bonne organisation du code source (modèle MVC par exemple).
• Maintenabilité : l’organisation du Framework facilite la maintenance du logiciel et la gestion des évolutions.
8. 8
Copyright - Tout droit réservé - OFPPT
PARTIE
1
01 - Découvrir les notions fondamentales des
Frameworks PHP
Présentation des Frameworks PHP
Les critères de choix d’un Framework PHP
1. la courbe d’apprentissage du framework ne devrait pas être trop dure.
2. Le framework PHP doit répondre aux exigences techniques de votre projet. (version PHP minimale , supporter la ou les bases de données du projet, …)
3. Un bon équilibre de fonctionnalités du framework vis-à-vis du projet. Choisir un framework minimal pour un petit projet.
4. Une bonne documentation et un bon support sont importants pour que vous puissiez tirer le meilleur parti de votre framework PHP.
Les Frameworks PHP les plus populaires
Il est difficile d’obtenir une liste définitive des frameworks PHP. Wikipédia liste 40 frameworks PHP.
Voici quelques-uns des meilleurs frameworks PHP en usage aujourd’hui :
1. Laravel
2. Symfony
3. Zend Framework / Laminas Project
4. Yii Framework
5. …
9. 9
Copyright - Tout droit réservé - OFPPT
PARTIE
1
01 - Découvrir les notions fondamentales des
Frameworks PHP
Présentation des Frameworks PHP
Le framework Symphony
Symfony est un excellent choix pour les sites web et les applications qui doivent être évolutifs, il a
plusieurs fonctionnalités:
• Supporte la plupart des bases de données.
• a son propre ORM Doctrine.
• Utilise le moteur de templating Twig, qui est facile à apprendre, rapide et sûr.
• Packagist * liste plus de 4 000 paquets Symfony téléchargeable prête à utiliser.
• dispose d’un support support professionnel (support commercial de Sensio Labs) ,
contrairement à la plupart des autres frameworks PHP.
• S’intègre facilement avec des frameworks populaires comme Drupal.
* Packagist est une sorte de répertoire public de packages PHP utilisables via Composer.
Composer est un gestionnaire de dépendances entre applications et librairies.
Composer permet de gérer pour chaque projet, la liste des modules et bibliothèques nécessaires à son fonctionnement ainsi que leurs versions. Il est utilisable
via la console en ligne de commande. De plus, il permet de mettre en place un système d’autoload pour les bibliothèques compatibles.
10. 10
Copyright - Tout droit réservé - OFPPT
PARTIE
1
01 - Découvrir les notions fondamentales des
Frameworks PHP
Présentation des Frameworks PHP
Le framework Laravel
Laravel est présenté comme « Le framework PHP pour les artisans du web ».
Lancé en 2011, Laravel se trouve en tête des classements grâce à ses fonctionnalités:
• Offre une solution MVC complète.
• a son propre ORM Eloquent ORM .
• Utilise le moteur de templating Blade. On peut utiliser PHP dans Blade, contrairement aux autres.
• Packalyst, une collection de paquets Laravel, compte plus de 15 000 paquets utilisable .
• Dispose de l’outil de ligne de commande Artisan Console qui permet d’automatiser les tâches
répétitives et de générer rapidement du code squelette.
• Dispose de plusieurs outils utiles tels que Mix pour la compilation des actifs CSS et JS, et Socialite pour
l’authentification OAuth.
• Bénéficie d’une large communauté de développeurs
11. 11
Copyright - Tout droit réservé - OFPPT
PARTIE
1
01 - Découvrir les notions fondamentales des
Frameworks PHP
Présentation des Frameworks PHP
Le Zend framework/ Laminas Project
Zend Framework est un framework PHP établi de longue date qui est maintenant en transition vers Laminas Project.
La migration vers Laminas est fortement recommandée, car Zend n’est plus mis à jour.
• C'est un framework complètement orienté objet.
• Basé sur une méthodologie agile.
• Il suit strictement le modèle de conception MVC
• La communauté de Laminas dispose d’un forum et d’un groupe Slack pour la collaboration et le support.
• Le seul inconvénient de Zend réside dans le fait qu’il n’est pas aussi facile à maîtriser.
12. 12
Copyright - Tout droit réservé - OFPPT
PARTIE
1
01 - Découvrir les notions fondamentales des
Frameworks PHP
Présentation des Frameworks PHP
Le Yii Framework
Le nom de ce framework, Yii, signifie « simple et évolutif » en chinois. Il signifie également « Yes, It Is ! ».
Les principaux avantages de l'utilisation du framework Yii sont:
• C'est assez facile à installer et à démarrer
• Il est préchargé avec un modèle Bootstrap
• Il est livré avec un design élégant pour commencer rapidement
• C'est un framework PHP qui est également livré avec un débogueur
• Il est livré avec un générateur de code de classe extrêmement puissant appelé Gii. Le générateur de
code Gii peut rapidement construire un squelette de code pour vous, ce qui permet de gagner du
temps.
• La communauté Yii offre un support en direct via Slack ou IRC.
13. 13
Copyright - Tout droit réservé - OFPPT
PARTIE
1
01 - Découvrir les notions fondamentales des
Frameworks PHP
Présentation des Frameworks PHP
Ce que vous devez savoir avant d’utiliser un framework PHP
Avant d’utiliser un framework PHP, il faut connaitre :
- Le langage PHP lui-même. La plupart des frameworks fonctionnent avec PHP version 7.2 ou supérieure.
- Le PHP orienté objet, car la plupart des frameworks PHP modernes sont orientés objet.
- Les bases de données et la syntaxe SQL. Chaque framework PHP a sa propre liste de bases de données supportées.
- ORM (Object-Relational-Mapping) est une méthode d’accès aux données d’une base de données utilisant une syntaxe orientée objet au lieu d’utiliser le langage SQL. De
nombreux frameworks PHP ont leur propre ORM intégré.
- Le fonctionnent les serveurs web comme Apache et Nginx.
- Architecture MVC (Modèle – Vue – Controleur). Les frameworks PHP suivent généralement le modèle de conception MVC
- L’utilisation d’une interface en ligne de commande (commande-line interface ou CLI) permet de se sentir à l’aise dans un framework PHP.
14. Ce que vous allez apprendre dans ce chapitre :
1. Présentation des Frameworks PHP
2. L’architecture MVC
3. Intérêt du Framework Laravel
02 heures
CHAPITRE 1
Découvrir les notions fondamentales des
Frameworks PHP
15. 15
Copyright - Tout droit réservé - OFPPT
PARTIE
1
01 - Découvrir les notions fondamentales des
Frameworks PHP
Présentation des Frameworks PHP
L‘architecture MVC
Les frameworks PHP suivent généralement le plus célèbres design patterns qui s'appelle MVC, qui signifie Modèle - Vue - Contrôleur.
Le but du pattern MVC est de séparer la logique du code en trois parties que l'on retrouve dans des fichiers distincts.
• Modèle : cette partie gère la logique métier. Le modèle communique avec la BDD. C’est lui qui s’occupe de récupérer un article en base par exemple. On y
trouve des algorithmes complexes et des requêtes SQL.
• Vue : cette partie se concentre sur l'affichage. Elle affiche à l’utilisateur des données contenues dans des variables. On y trouve essentiellement du code
HTML mais aussi quelques boucles et conditions PHP très simples.
• Contrôleur : cette partie gère les échanges avec l'utilisateur. C'est en quelque sorte l'intermédiaire entre l'utilisateur, le modèle et la vue. Le modèle lui
transmet les données récupérées en base de données, puis il transmet ces données à la vue.
Laravel propose le modèle MVC mais ne l’impose pas.
16. 16
Copyright - Tout droit réservé - OFPPT
PARTIE
1
01 - Découvrir les notions fondamentales des
Frameworks PHP
Présentation des Frameworks PHP
L‘architecture MVC
1. Le contrôleur reçoit des requêtes de l'utilisateur.
2. Le contrôleur va demander au modèle d'effectuer
certaines actions (lire des informations depuis une base
de données,…) et de lui renvoyer les résultats.
3. Le contrôleur va adapter ce résultat et le donner à la
vue.
4. Enfin, le contrôleur va renvoyer la nouvelle page HTML,
générée par la vue, à l'utilisateur.
Le client et l'architecture MVC
17. Ce que vous allez apprendre dans ce chapitre :
1. Présentation des Frameworks PHP
2. L’architecture MVC
3. Intérêt du Framework Laravel
02 heures
CHAPITRE 1
Découvrir les notions fondamentales des
Frameworks PHP
18. 18
Copyright - Tout droit réservé - OFPPT
PARTIE
1
01 - Découvrir les notions fondamentales des
Frameworks PHP
Intérêt du Framework Laravel
Pourquoi choisir le Framework Laravel ?
https://laravel.sillo.org/cours-laravel-8-les-bases-presentation-generale/
Laravel est le framework PHP le plus utilisé au monde
19. 19
Copyright - Tout droit réservé - OFPPT
PARTIE
1
01 - Découvrir les notions fondamentales des
Frameworks PHP
Intérêt du Framework Laravel
Pourquoi choisir le Framework Laravel ?
1. une sécurité de haut niveau: Avec Laravel, votre application Web ne présente aucun risque d’injections SQL involontaires et cachées.
2. Performance: Laravel propose divers outils qui aident les développeurs à améliorer leurs performances.
3. Bibliothèques orientées objet: Laravel possède des bibliothèques orientées objet et d’autre pré installées, qui ne se trouvent dans aucun autre
framework PHP. Comme la bibliothèque d’authentification.
4. Documentation et communauté: Laravel possède une puissante communauté de développeurs qui fournit en une assistance en permanence.
5. Tests unitaires: Avec les tests unitaires de Laravel, chaque module de votre application Web est testé avant la mise en ligne du site.
6. Intégration aux services de messagerie : Il fournit également des pilotes pour Mailgun, SMTP, Mandrill, SparkPost, la fonction de courrier électronique
de PHP et Amazon SES.
7. Créateur d’applications multilingues: Le framework Laravel vous aide donc à créer facilement et rapidement votre application Web dans différentes
langues.
8. Tutoriels Laracasts : Laravel propose des fonctionnalités de Laracasts, un mélange de tutoriels vidéo gratuits et payants qui vous montrent comment
utiliser Laravel pour le développement.
20. 20
Copyright - Tout droit réservé - OFPPT
PARTIE
1
01 - Découvrir les notions fondamentales des
Frameworks PHP
Résumé
Résumé
• Un framework fait gagner du temps et donne l’assurance de disposer de composants bien codés et fiables.
• Laravel est un framework novateur, complet, qui utilise les possibilités les plus récentes de PHP et qui est impeccablement
codé et organisé.
• La documentation de Laravel est complète, précise et de plus en plus de tutoriels et exemples apparaissent sur la toile.
• Laravel adopte le patron MVC, mais ne l’impose pas.
• Laravel est totalement orienté objet.
21. CHAPITRE 2
Préparer l’environnement de Laravel
1. Installation des outils pour Laravel
2. Créer un nouveau projet Laravel
3. Architecture d’un projet Laravel
4. Laravel Artisan
5. Lancer le projet Laravel
22. 22
Copyright - Tout droit réservé - OFPPT
PARTIE
1
02 - Préparer l’environnement de Laravel
Installation des outils pour Laravel
Les outils pour Laravel
Pour travailler avec Laravel, vous avez besoin de :
1. PHP
2. un serveur Local (Apache ou Nginx), permettant l’execution du PHP
3. un serveur de base de données pour gérer vos bases de données.
4. Composer, un gestionnaire de dépendances pour PHP
5. IDE et Editeurs de code ( Visual Studio Code, Atom, PHPStorm …)
6. Navigateurs Web : Laravel est compatible sur tout les navigateurs récents (Chrome, Firefox ou Safari)
Nous vous recommandons d'installer les dernières versions de ces logiciels ayant une version PHP plus récente
(PHP 8.X pour Laravel 9, PHP 7.4 pour Laravel 8).
Document officielle : https://laravel.com/docs/9.x
23. 23
Copyright - Tout droit réservé - OFPPT
PARTIE
1
02 - Préparer l’environnement de Laravel
Installation des outils pour Laravel
Téléchargement et installation de PHP
• Pour installer PHP vous allez devoir vous rendre sur la page de téléchargement Windows du site
officiel : http://windows.php.net/download/.
• Installer la version 7.3 ou plus
• Vérifier que php est bien installé en exécutant la commande dans la console php --version.
Configuration des extensions nécessaires pour PHP
Les extensions PDO, Tokenizer, OpenSSL etMbstring de PHP doivent être activées.
Dans le fichier Le fichier de configuration de PHP php.ini , décommenter les lignes ci-dessous en enlevant
le point virgule au début des lignes :
;extension=php_mbstring.dll
;extension=php_openssl.dll
24. 24
Copyright - Tout droit réservé - OFPPT
PARTIE
1
02 - Préparer l’environnement de Laravel
Installation des outils pour Laravel
Composer - Définition
Composer est un logiciel gestionnaire de dépendances libre écrit en PHP. Il permet à ses utilisateurs de déclarer et
d'installer les bibliothèques dont le projet principal a besoin. Il permet de télécharger et de mettre à jour des bibliothèques
externes.
Les bibliothèques externes permettent de réutiliser le code écrit par d'autres personnes pour simplifier le
développement.
Exemple:
• Pour gérer des dates, vous pouvez utiliser Carbon
• Pour gérer les paiements Paypal, vous pouvez utiliser la bibliothèque officielle PayPal PHP SDK).
Composer permet également de créer des projets Laravel et de télécharger le framework.
Le framework Laravel est un simple assemblage de plusieurs dizaines de bibliothèques.
25. 25
Copyright - Tout droit réservé - OFPPT
PARTIE
1
02 - Préparer l’environnement de Laravel
Installation des outils pour Laravel
Installation de Composer
Pour installer Composer, il suffit de télécharger un installeur https://getcomposer.org/download/ et téléchargez Composer-Setup.exe.
Vérifiez lors de l'installation que le chemin par défaut vers PHP est bien C:PHPphp.exe. car Composer est un fichier PHP et a besoin d’être exécuté.
Vérifications
Pour vérifier que tout fonctionne exécuter composer sur la ligne de commande comme suit:
ici on peut voir que j’ai la version 2.3.10 de composer installée.
26. CHAPITRE 2
Préparer l’environnement de Laravel
1. Installation des outils pour Laravel
2. Créer un nouveau projet Laravel
3. Architecture d’un projet Laravel
4. Laravel Artisan
5. Lancer le projet Laravel
27. 27
Copyright - Tout droit réservé - OFPPT
PARTIE
1
02 - Préparer l’environnement de Laravel
Installation de Laravel
Utiliser l’installeur de Laravel
• Installer Laravel dans notre ordinateur : Ouvrez votre terminal (invite de commande) et tapez la ligne suivante:
Créer notre premier projet laravel (project_laravel) – Méthode 1 :
Taper la commande laravel new project_laravel en plaçant le terminal dans le répertoire de travail (ex. www ou htdocs):
require: ajoute la bibliothèque en paramètre au
fichier composer.json et l'installe.
28. 28
Copyright - Tout droit réservé - OFPPT
PARTIE
1
02 - Préparer l’environnement de Laravel
Créer un nouveau projet Laravel
Créer un nouveau projet Laravel avec Composer – Méthode 2:
Créer un deuxième projet à la racine du serveur nommé project_laravel2 :avec la commande suivante:
• Dirigez-vous vers votre dossier à la racine de votre serveur www ou htdocs et exécuter la commande :
composer create-project laravel/laravel project_laravel2
Ici nous avons demandé à composer de créer une installation Laravel dans le dossier «blog».
Cette commande installera automatiquement la dernière version stable de Laravel.
29. CHAPITRE 2
Préparer l’environnement de Laravel
1. Installation des outils pour Laravel
2. Créer un nouveau projet Laravel
3. Architecture d’un projet Laravel
4. Laravel Artisan
5. Lancer le projet Laravel
30. 30
Copyright - Tout droit réservé - OFPPT
PARTIE
1
02 - Préparer l’environnement de Laravel
Architecture d’un projet Laravel
Architecture d’un projet Laravel
Ouvrez le dossier project_laravel avec l’éditeur Visual Code ou autre ,
vous devez avoir ceci comme résultat :
31. 31
Copyright - Tout droit réservé - OFPPT
PARTIE
1
02 - Préparer l’environnement de Laravel
Architecture d’un projet Laravel
Les répertoires racines d’un projet Laravel
❑ /app : contient le code principal de votre application. Il contient deux répertoires principal http et Models.
❑ Le répertoire Http :contient les contrôleurs et les middleware.
❑ Le répertoire Models : contient toutes les classes de modèle Eloquent.
❑ /config : contient tous les fichiers de configuration de votre application, authentification, namespace, mails, base
de données etc…
❑ /database : contient vos migrations de base de données, les données factices ( faux data) de vos modèles.
❑ /lang: contient tous les fichiers de langue de votre application. Vous permettant de
gérer plusieurs langues dans votre site web. Ce répertoire est devenu racine que à partir de la version
9 de Laravel, dans les versions ultérieures, le répertoire lang se trouve dans le dossier public.
32. 32
Copyright - Tout droit réservé - OFPPT
PARTIE
1
02 - Préparer l’environnement de Laravel
Architecture d’un projet Laravel
Les répertoires racines d’un projet Laravel
❑ /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).
Contient le fichier index.php, qui est le point d'entrée pour toutes les demandes entrant dans votre application et
configure le chargement automatique.
❑ /resources: contient vos vues ainsi que vos fichiers bruts non compilés tels que CSS, SASS ou JavaScript
❑ /routes :contient toutes les définitions des URLs pour votre application.
Par défaut, 4 fichiers de route sont inclus avec Laravel : web.php, api.php, console.php et channels.php.
• Le fichier web.php: contient des routes placés dans le RouteServiceProvider (web groupe middleware), qui
fournit l'état de la session, la protection CSRF et le cryptage des cookies.
33. 33
Copyright - Tout droit réservé - OFPPT
PARTIE
1
02 - Préparer l’environnement de Laravel
Architecture d’un projet Laravel
composer.json
❑ /storage: contient vos logs, modèles de vues (blades) compilés, sessions basées sur des fichiers, fichiers caches et
autres fichiers générés par le framework.
Ce répertoire est divisé en répertoires app, framework et logs.
• storage/app peut être utilisé pour stocker tous les fichiers générés par votre application.
• storage/framework est utilisé pour stocker les fichiers et les caches générés par le framework.
• storage/logs contient les fichiers journaux de votre application.
• storage/app/public: peut être utilisé pour stocker des fichiers générés par l'utilisateur, tels que des avatars de
profil, les images des vos publications, qui doivent être accessibles au public.
➢ Vous devez créer un lien symbolique(raccourcis) public/storage pointant vers ce répertoire.
➢ Vous pouvez créer le lien à l'aide de la commande Artisan : php artisan storage:link
❑ /bootstrap : démarrage de l’app.
34. 34
Copyright - Tout droit réservé - OFPPT
PARTIE
1
02 - Préparer l’environnement de Laravel
Architecture d’un projet Laravel
Les répertoires racines d’un projet Laravel
❑ /tests: contient vos tests automatisés. Des exemples de tests unitaires PHPUnit et de tests de fonctionnalités sont
fournis prêts à l'emploi.
➢ Chaque classe de test doit être suffixée par le mot Test.
➢ Vous pouvez exécuter vos tests à l'aide des commandes php unit ou php vendor/bin/phpunit.
➢ Ou, si vous souhaitez une représentation plus détaillée et plus belle de vos résultats de test, vous pouvez
exécuter vos tests à l'aide de la commande Artisan php artisan test.
35. 35
Copyright - Tout droit réservé - OFPPT
PARTIE
1
02 - Préparer l’environnement de Laravel
Architecture d’un projet Laravel
Qu'est ce que le fichier composer.json ?
C'est le fichier qui stocke tous les paquets (dépendances) d'un projet, ainsi que leurs versions, mais peut aussi être utilisé
pour définir un projet quand il est publié sur Git, par exemple.
{
"name": "laravel/laravel",
"type": "project",
"description": "The Laravel Framework.",
"keywords": [ "framework", "laravel" ],
"license": "MIT",
"require": {
"php": "^7.1.3",
"fideloper/proxy": "^4.0",
"laravel/framework": "5.7.*",
"laravel/tinker": "^1.0«
},
[....]
(ici ma version de Laravel est la 5.7 et nécessite une version php qui soit au
moins égal à la 7.1.3)
36. CHAPITRE 2
Préparer l’environnement de Laravel
1. Installation des outils pour Laravel
2. Créer un nouveau projet Laravel
3. Architecture d’un projet Laravel
4. Laravel Artisan
5. Lancer le projet Laravel
37. 37
Copyright - Tout droit réservé - OFPPT
PARTIE
1
02 - Préparer l’environnement de Laravel
Laravel Artisan
Qu'est ce que Laravel Artisan?
Laravel Artisan est une Interface en Ligne de Commande (CLI) qui va vous permettre de gérer votre application en lançant des commandes via le terminal (effacer le
cache de l’application, gérer des modèles, des contrôleurs, des routes…)
Laravel Artisan: commandes utiles
1. Afficher la liste des commandes artisan
2. Pour afficher un écran d'aide, faites précéder le nom de la commande de help
3. Pour créer un modèle
4. Vérifier la version de Laravel installée
php artisan list
php artisan help migrate
php artisan make:model NomDuModel
php artisan -version
38. 38
Copyright - Tout droit réservé - OFPPT
PARTIE
1
02 - Préparer l’environnement de Laravel
Laravel Artisan
Laravel Artisan: commandes utiles (suite)
5. lancer le serveur , lancer le projet Laravel
6. voir toutes les routes de votre application
7. Exécuter toutes les migrations:
8. faire un retour en arrière pour la dernière migration
artisan route:list
php artisan migrate
php artisan serve
php artisan migrate : rollback
39. CHAPITRE 2
Préparer l’environnement de Laravel
1. Installation des outils pour Laravel
2. Créer un nouveau projet Laravel
3. Architecture d’un projet Laravel
4. Laravel Artisan
5. Lancer le projet Laravel
40. 40
Copyright - Tout droit réservé - OFPPT
PARTIE
1
02 - Préparer l’environnement de Laravel
Lancer le projet Laravel
Lancer le projet Laravel
1. Placez le terminal dans le dossier racine de votre projet et taper les commandes: php artisan key:generate
ensuite php artisan serve :
Sous windows 10 , en cas d’erreur exécuter la commande
suivante : composer install --ignore-platform-reqs
41. 41
Copyright - Tout droit réservé - OFPPT
PARTIE
1
02 - Préparer l’environnement de Laravel
Lancer le projet Laravel
Lancer le projet Laravel
1. Ouvrez le navigateur et allez sur http://localhost/:8000, et vous obtiendrez le résultat suivant :
42. 42
Copyright - Tout droit réservé - OFPPT
PARTIE
1
02 - Préparer l’environnement de Laravel
Résumé
Résumé
• Pour son installation et sa mise à jour, Laravel utilise le gestionnaire de dépendances Composer.
• La création d’une application Laravel se fait à partir de la console avec une simple ligne de commande.
• Laravel est organisé en plusieurs dossiers.
• Le dossier public est le seul qui doive être accessible par le serveur.
43. Dans ce module, vous allez :
PARTIE 1
Programmer avec Laravel
• Connaître les fondements du modèle
MVC Laravel
• Maîtriser le Framework Laravel
30 heures
44. Ce que vous allez apprendre dans ce chapitre :
• Routage de base (redirection, affichage, liste de routes)
• Paramètres de routage
• Routes nommées
• Groupe de routage
• Liaisons de modèles de routes
• Routes de repli
• (spoofing) de la méthode du formulaire
• Accès à la route courante
• Cross Origin Resource Sharing (CORS)
• Mise en cache des routes
05 heures
CHAPITRE 1
Gestion du routage
45. CHAPITRE 1
Gestion du routage
1. Routage de base (redirection, affichage, liste de routes)
2. Paramètres de routage
3. Routes nommées
4. Groupe de routage
5. Liaisons de modèles de routes
6. Routes de repli
7. (spoofing) de la méthode du formulaire
8. Accès à la route courante
9. Cross Origin Resource Sharing (CORS)
10. Mise en cache des routes
46. 46
Copyright - Tout droit réservé - OFPPT
PARTIE
1
01 - Gestion du routage
Routage de base
• Les routes Laravel les plus basiques acceptent un URI et une fermeture, fournissant une méthode très simple et expressive de
définition des routes et du comportement sans fichiers de configuration de routage compliqués :
• Un itinéraire pour une post-demande qui fait simplement écho aux variables post:
use IlluminateSupportFacadesRoute;
Route::get('/greeting', function () {
return 'Hello World';
});
47. 47
Copyright - Tout droit réservé - OFPPT
PARTIE
1
01 - Gestion du routage
Routage de base
• Toutes les routes Laravel sont définies dans vos fichiers de route, qui se trouvent dans le répertoire routes. Ces fichiers sont
automatiquement chargés par le fichier AppProvidersRouteServiceProvider. Le routes/web.php fichier définit les itinéraires qui
sont destinés à votre interface Web. Ces routes sont affectées au webgroupe middleware, qui fournit des fonctionnalités telles que
l'état de session et la protection CSRF. Les routes dans routes/api.php sont sans état et sont affectées au api groupe middleware.
• Pour la plupart des applications, vous commencerez par définir des routes dans votre fichier routes/web.php. Les itinéraires définis
dans routes/web.php sont accessibles en saisissant l'URL de l'itinéraire défini dans votre navigateur. Par exemple, vous pouvez
accéder à l'itinéraire suivant en naviguant vers http://example.com/user dans votre navigateur :
• Les routes définies dans le fichier routes/api.php sont imbriquées dans un groupe de routes par le RouteServiceProvider. Dans ce
groupe, le préfixe URI /api est automatiquement appliqué, vous n'avez donc pas besoin de l'appliquer manuellement à chaque route
du fichier. Vous pouvez modifier le préfixe et d'autres options de groupe de routage en modifiant votre classe RouteServiceProvider.
Les fichiers de routage par défaut
use IlluminateSupportFacadesRoute;
Route::get('/greeting', function () {
return 'Hello World';
});
48. 48
Copyright - Tout droit réservé - OFPPT
PARTIE
1
01 - Gestion du routage
Routage de base
• Le routeur vous permet d'enregistrer des routes qui répondent à n'importe quel verbe HTTP :
• Parfois, vous devrez peut-être enregistrer une route qui répond à plusieurs verbes HTTP. Vous pouvez le faire en utilisant
la méthode match. Ou, vous pouvez même enregistrer une route qui répond à tous les verbes HTTP en utilisant la méthode
any :
Méthodes de routeur disponibles
Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);
Route::match(['get', 'post'], '/', function () {
//
});
Route::any('/', function () {
//
});
49. 49
Copyright - Tout droit réservé - OFPPT
PARTIE
1
01 - Gestion du routage
Routage de base
• Vous pouvez indiquer toutes les dépendances requises par votre itinéraire dans la signature de rappel de votre itinéraire. Les
dépendances déclarées seront automatiquement résolues et injectées dans le rappel par le conteneur de service Laravel . Par
exemple, vous pouvez donner un indice de type à la classe IlluminateHttpRequest pour que la requête HTTP actuelle soit
automatiquement injectée dans votre rappel de route :
Figure 1 : les navigateurs les plus utilisés
Injection de dépendance
use IlluminateHttpRequest;
Route::get('/users', function (Request $request) {
// ...
});
50. 50
Copyright - Tout droit réservé - OFPPT
PARTIE
1
01 - Gestion du routage
Routage de base
Redirection
Source : https://www.wddonline.com/2016/09/27/history-world-wide-web/
• Si vous définissez une route qui redirige vers un autre URI, vous pouvez utiliser la méthode Route::redirect. Cette méthode
fournit un raccourci pratique pour que vous n'ayez pas à définir une route ou un contrôleur complet pour effectuer une
simple redirection :
• Par défaut, Route::redirect renvoie un code d'état 302. Vous pouvez personnaliser le code d'état à l'aide du troisième
paramètre facultatif :
• Ou, vous pouvez utiliser la méthode Route::permanentRedirect pour renvoyer un code d'état 301:
Route::redirect('/ici', '/là-bas');
Route::redirect('/ici', '/là-bas', 301);
Route::permanentRedirect ('/ici', '/là-bas ');
51. 51
Copyright - Tout droit réservé - OFPPT
PARTIE
1
01 - Gestion du routage
Routage de base
Afficher les routes
Source : https://www.wddonline.com/2016/09/27/history-world-wide-web/
• Si votre itinéraire ne doit renvoyer qu'une vue , vous pouvez utiliser la méthode Route::view. Comme la méthode redirect,
cette méthode fournit un raccourci simple pour que vous n'ayez pas à définir une route ou un contrôleur complet. La
méthode view accepte un URI comme premier argument et un nom de vue comme second argument. De plus, vous pouvez
fournir un tableau de données à transmettre à la vue en tant que troisième argument facultatif :
Route::view('/welcome', 'welcome');
Route::view('/welcome', 'welcome', ['name' => ‘Ahmed']);
52. 52
Copyright - Tout droit réservé - OFPPT
PARTIE
1
01 - Gestion du routage
Routage de base
La liste des routes
• La commande Artisan route:list peut facilement fournir une vue d'ensemble de toutes les routes définies par votre
application :
• Par défaut, le middleware de route affecté à chaque route ne sera pas affiché dans la sortie route:list ; cependant, vous
pouvez demander à Laravel d'afficher le middleware de route en ajoutant l' option -v à la commande :
• Vous pouvez également demander à Laravel de n'afficher que les routes commençant par un URI donné :
• De plus, vous pouvez demander à Laravel de masquer toutes les routes définies par des packages tiers en fournissant
l'option --except-vendor lors de l'exécution de la commande route:list :
php artisan route:list
php artisan route:list -v
php artisan route:list --path=api
php artisan route:list --except-vendor
53. 53
Copyright - Tout droit réservé - OFPPT
PARTIE
1
01 - Gestion du routage
Routage de base
La liste des routes
• De même, vous pouvez également demander à Laravel de n'afficher que les routes définies par des packages tiers en
fournissant l'option --only-vendor lors de l'exécution de la commande route:list :
php artisan route:list
54. CHAPITRE 1
Gestion du routage
1. Routage de base (redirection, affichage, liste de routes)
2. Paramètres de routage
3. Routes nommées
4. Groupe de routage
5. Liaisons de modèles de routes
6. Routes de repli
7. (spoofing) de la méthode du formulaire
8. Accès à la route courante
9. Cross Origin Resource Sharing (CORS)
10. Mise en cache des routes
55. 55
Copyright - Tout droit réservé - OFPPT
PARTIE
1
01 - Gestion du routage
Paramètres de routage
Source : https://www.wddonline.com/2016/09/27/history-world-wide-web/
Paramètres requis
• Parfois, vous devrez capturer des segments de l'URI dans votre route. Par exemple, vous devrez peut-être capturer l'ID d'un
utilisateur à partir de l'URL. Vous pouvez le faire en définissant les paramètres de route :
• Vous pouvez définir autant de paramètres de route que requis par votre route :
• Les paramètres de route sont toujours entourés d'accolades {} et doivent être composés de caractères alphabétiques. Les
traits de soulignement ( _) sont également acceptables dans les noms de paramètre de route. Les paramètres de route sont
injectés dans les rappels/contrôleurs de route en fonction de leur ordre - les noms des arguments de rappel/contrôleur de
route n'ont pas d'importance.
Route::get('/user/{id}', function ($id) {
return 'User '.$id;
});
Route::get('/posts/{post}/comments/{comment}', function ($postId, $commentId) {
//
});
56. 56
Copyright - Tout droit réservé - OFPPT
PARTIE
1
01 - Gestion du routage
Paramètres de routage
Paramètres et injection de dépendance
• Si votre route a des dépendances que vous aimeriez que le conteneur de service Laravel injecte automatiquement dans le
rappel de votre route, vous devez lister vos paramètres de route après vos dépendances.
•
use IlluminateHttpRequest;
Route::get('/user/{id}', function (Request $request, $id) {
return 'User '.$id;
});
57. 57
Copyright - Tout droit réservé - OFPPT
PARTIE
1
01 - Gestion du routage
Paramètres de routage
Paramètres facultatifs
• Parfois, vous devrez peut-être spécifier un paramètre de route qui n'est pas toujours présent dans l'URI. Vous pouvez le faire
en plaçant une ? marque après le nom du paramètre. Assurez-vous de donner une valeur par défaut à la variable
correspondante de la route :
•
Route::get('/user/{name?}', function ($name = null) {
return $name;
});
Route::get('/user/{name?}', function ($name = Ahmed') {
return $name;
});
58. CHAPITRE 1
Gestion du routage
1. Routage de base (redirection, affichage, liste de routes)
2. Paramètres de routage
3. Routes nommées
4. Groupe de routage
5. Liaisons de modèles de routes
6. Routes de repli
7. (spoofing) de la méthode du formulaire
8. Accès à la route courante
9. Cross Origin Resource Sharing (CORS)
10. Mise en cache des routes
59. 59
Copyright - Tout droit réservé - OFPPT
PARTIE
1
01 - Gestion du routage
Routes nommées
• Les routes nommées permettent la génération pratique d'URL ou de redirections pour des routes spécifiques. Vous pouvez
spécifier un nom pour une route en enchaînant la méthode name sur la définition de route :
• Vous pouvez également spécifier des noms de route pour les actions du contrôleur :
•
Route::get('/user/profile', function () {
//
})->name('profile');
Route::get(
'/user/profile',
[UserProfileController::class, 'show']
)->name('profile');
60. 60
Copyright - Tout droit réservé - OFPPT
PARTIE
1
01 - Gestion du routage
Routes nommées
Génération d'URL vers des routes nommées
• Une fois que vous avez attribué un nom à une route donnée, vous pouvez utiliser le nom de la route lors de la génération
d'URL ou de redirections via les fonctions de Laravel route et d'assistance redirect :
• Si la route nommée définit des paramètres, vous pouvez passer les paramètres comme deuxième argument à la
fonction route. Les paramètres donnés seront automatiquement insérés dans l'URL générée dans leurs positions correctes :
•
// Generating URLs...
$url = route('profile');
// Generating Redirects...
return redirect()->route('profile');
Route::get('/user/{id}/profile', function ($id) {
//
})->name('profile');
$url = route('profile', ['id' => 1]);
61. 61
Copyright - Tout droit réservé - OFPPT
PARTIE
1
01 - Gestion du routage
Routes nommées
• Si vous transmettez des paramètres supplémentaires dans le tableau, ces paires clé/valeur seront automatiquement ajoutées
à la chaîne de requête de l'URL générée :
Route::get('/user/{id}/profile', function ($id) {
//
})->name('profile');
$url = route('profile', ['id' => 1, 'photos' => 'yes']);
// /user/1/profile?photos=yes
62. CHAPITRE 1
Gestion du routage
1. Routage de base (redirection, affichage, liste de routes)
2. Paramètres de routage
3. Routes nommées
4. Groupe de routage
5. Liaisons de modèles de routes
6. Routes de repli
7. (spoofing) de la méthode du formulaire
8. Accès à la route courante
9. Cross Origin Resource Sharing (CORS)
10. Mise en cache des routes
63. 63
Copyright - Tout droit réservé - OFPPT
PARTIE
1
01 - Gestion du routage
Groupes de routage
• Les routes peuvent être regroupées pour éviter la répétition du code.
• Les groupes de routage vous permettent de partager des attributs de routage, tels que le middleware, sur un grand nombre
de routages sans avoir à définir ces attributs sur chaque routage individuel.
• Disons que tous les URI avec un préfixe de /admin utilisent un certain middleware appelé admin et qu'ils vivent tous dans
l'espace de noms AppHttpControllersAdmin .
• Une manière propre de représenter cela en utilisant des groupes de routage est la suivante:
•
Route::group([
'namespace' => 'Admin',
'middleware' => 'admin',
'prefix' => 'admin'
], function () {
// something.dev/admin
// 'AppHttpControllersAdminIndexController‘
// Uses admin middleware
Route::get('/', ['uses' => 'IndexController@index']);
// something.dev/admin/logs
// 'AppHttpControllersAdminLogsController'
// Uses admin middleware
Route::get('/logs', ['uses' => 'LogsController@index']);
});
64. CHAPITRE 1
Gestion du routage
1. Routage de base (redirection, affichage, liste de routes)
2. Paramètres de routage
3. Routes nommées
4. Groupe de routage
5. Liaisons de modèles de routes
6. Routes de repli
7. (spoofing) de la méthode du formulaire
8. Accès à la route courante
9. Cross Origin Resource Sharing (CORS)
10. Mise en cache des routes
65. 65
Copyright - Tout droit réservé - OFPPT
PARTIE
1
01 - Gestion du routage
Liaison modèle de route
Liaison Implicite
• Laravel résout automatiquement les modèles Eloquent définis dans les itinéraires ou les actions de contrôleur dont les noms
de variable correspondent à un nom de segment de route. Par exemple:
• Dans cet exemple, comme la variable utilisateur éloquent $ définie sur la route correspond au segment {utilisateur} dans l'URI
de la route, Laravel injectera automatiquement l'instance de modèle dont l'ID correspond à la valeur correspondante de l'URI
de la demande. Si une instance de modèle correspondante n'est pas trouvée dans la base de données, une réponse HTTP 404
sera automatiquement générée.
• Si le nom de la table du modèle est composé de plusieurs mots, pour que la liaison de modèle implicite fonctionne, la variable
d'entrée doit être en minuscules;
• Par exemple, si l'utilisateur peut effectuer une action quelconque et que nous voulons accéder à cette action, l'itinéraire sera
le suivant:
Route::get('api/users/{user}', function (AppUser $user) {
return $user->email;
});
Route::get('api/useractions/{useraction}', function (AppUserAction $useraction) {
return $useraction->description;
});
66. 66
Copyright - Tout droit réservé - OFPPT
PARTIE
1
01 - Gestion du routage
Liaison modèle de route
Liaison Explicite
• Pour enregistrer une liaison explicite, utilisez la méthode du modèle du routeur pour spécifier la classe d'un paramètre
donné. Vous devez définir vos liaisons de modèle explicites dans la méthode de démarrage de la classe RouteServiceProvider
• Ensuite, nous pouvons définir une route contenant le paramètre {utilisateur}.
• Comme nous avons lié tous {user} paramètres {user} au modèle AppUser , une instance User sera injectée dans la route.
Ainsi, par exemple, une demande de profile/1 injectera l'instance d'utilisateur de la base de données dont l' identifiant est 1 .
• Si une instance de modèle correspondante n'est pas trouvée dans la base de données, une réponse HTTP 404 sera
automatiquement générée
$router->get('profile/{user}', function(AppUser $user) {
});
public function boot()
{
parent::boot();
Route::model('user', AppUser::class);
}
67. CHAPITRE 1
Gestion du routage
1. Routage de base (redirection, affichage, liste de routes)
2. Paramètres de routage
3. Routes nommées
4. Groupe de routage
5. Liaisons de modèles de routes
6. Routes de repli
7. (spoofing) de la méthode du formulaire
8. Accès à la route courante
9. Cross Origin Resource Sharing (CORS)
10. Mise en cache des routes
68. 68
Copyright - Tout droit réservé - OFPPT
PARTIE
1
01 - Gestion du routage
Routes de repli
• En utilisant la méthode Route::fallback, vous pouvez définir une route qui sera exécutée lorsqu'aucune autre route ne
correspond à la demande entrante.
• En règle générale, les requêtes non gérées afficheront automatiquement une page "404" via le gestionnaire d'exceptions de
votre application. Cependant, comme vous définissez généralement la fallbackroute dans votre fichier routes/web.php, tous
les middleware du groupe middleware web s'appliqueront à la route. Vous êtes libre d'ajouter un middleware supplémentaire
à cette route si nécessaire :
Route::fallback(function () {
//
});
69. CHAPITRE 1
Gestion du routage
1. Routage de base (redirection, affichage, liste de routes)
2. Paramètres de routage
3. Routes nommées
4. Groupe de routage
5. Liaisons de modèles de routes
6. Routes de repli
7. (spoofing) de la méthode du formulaire
8. Accès à la route courante
9. Cross Origin Resource Sharing (CORS)
10. Mise en cache des routes
70. 70
Copyright - Tout droit réservé - OFPPT
PARTIE
1
01 - Gestion du routage
Usurpation (spoofing) de la méthode du formulaire
• Les formulaires HTML ne prennent pas en charge les actions PUT, PATCH ou DELETE. Ainsi, lors de la définition de
routes appelées PUT, PATCH ou DELETE à partir d'un formulaire HTML, vous devrez ajouter un champ masqué _method au
formulaire. La valeur envoyée avec le champ _method sera utilisée comme méthode de requête HTTP :
• Pour plus de commodité, vous pouvez utiliser la directive Blade @method pour générer le champ _method de saisie :
<form action="/example" method="POST">
<input type="hidden" name="_method" value="PUT">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>
<form action="/example" method="POST">
@method('PUT')
@csrf
</form>
71. CHAPITRE 1
Gestion du routage
1. Routage de base (redirection, affichage, liste de routes)
2. Paramètres de routage
3. Routes nommées
4. Groupe de routage
5. Liaisons de modèles de routes
6. Routes de repli
7. (spoofing) de la méthode du formulaire
8. Accès à la route courante
9. Cross Origin Resource Sharing (CORS)
10. Mise en cache des routes
72. 72
Copyright - Tout droit réservé - OFPPT
PARTIE
1
01 - Gestion du routage
Accès à la route courante
• Vous pouvez utiliser les méthodes current, currentRouteName et currentRouteAction sur la façade Route pour accéder aux
informations sur la route traitant la requête entrante :
use IlluminateSupportFacadesRoute;
$route = Route::current(); // IlluminateRoutingRoute
$name = Route::currentRouteName(); // string
$action = Route::currentRouteAction(); // string
73. CHAPITRE 1
Gestion du routage
1. Routage de base (redirection, affichage, liste de routes)
2. Paramètres de routage
3. Routes nommées
4. Groupe de routage
5. Liaisons de modèles de routes
6. Routes de repli
7. (spoofing) de la méthode du formulaire
8. Accès à la route courante
9. Partage des ressources d'origine croisée(CORS)
10. Mise en cache des routes
74. 74
Copyright - Tout droit réservé - OFPPT
PARTIE
1
01 - Gestion du routage
Partage des ressources d'origine croisée (CORS)
• Laravel peut répondre automatiquement aux requêtes HTTP CORS OPTIONS avec des valeurs que vous configurez. Tous les
paramètres CORS peuvent être configurés dans le fichier config/cors.php de configuration de votre application. Les
requêtes OPTIONS seront automatiquement traitées par le middleware HandleCors qui est inclus par défaut dans votre pile
middleware globale. Votre pile middleware globale se trouve dans le noyau HTTP de votre application ( AppHttpKernel).
75. CHAPITRE 1
Gestion du routage
1. Routage de base (redirection, affichage, liste de routes)
2. Paramètres de routage
3. Routes nommées
4. Groupe de routage
5. Liaisons de modèles de routes
6. Routes de repli
7. (spoofing) de la méthode du formulaire
8. Accès à la route courante
9. Partage des ressources d'origine croisée(CORS)
10. Mise en cache des routes
76. 76
Copyright - Tout droit réservé - OFPPT
PARTIE
1
01 - Gestion du routage
Mise en cache des routes
• Lors du déploiement de votre application en production, vous devez tirer parti du cache de routage de Laravel. L'utilisation du
cache de route réduira considérablement le temps nécessaire pour enregistrer toutes les routes de votre application.
• Pour générer un cache de route, exécutez la commande Artisan route:cache :
• Après avoir exécuté cette commande, votre fichier de routes en cache sera chargé à chaque requête. N'oubliez pas que si
vous ajoutez de nouvelles routes, vous devrez générer un nouveau cache de routes. Pour cette raison, vous ne devez exécuter
la route:cachecommande que pendant le déploiement de votre projet.
• Vous pouvez utiliser la route:clearcommande pour vider le cache de route :
php artisan route:cache
php artisan route:clear
77. Ce que vous allez apprendre dans ce chapitre :
• Définition
• Enregistrement
• Paramétrage
• Terminate
05 heure
CHAPITRE 2
Utilisation des Middleware
79. 79
Copyright - Tout droit réservé - OFPPT
PARTIE
1
02 - Utilisation des Middleware
Définition
• Le middleware fournit un mécanisme pratique pour inspecter et filtrer les requêtes HTTP entrant dans votre application. Par
exemple, Laravel inclut un middleware qui vérifie que l'utilisateur de votre application est authentifié. Si l'utilisateur n'est pas
authentifié, le middleware redirigera l'utilisateur vers l'écran de connexion de votre application. Cependant, si l'utilisateur est
authentifié, le middleware permettra à la demande de continuer plus loin dans l'application.
• Pour créer un nouveau middleware, utilisez la commande Artisan make:middleware :
[5] https://code.visualstudio.com/
php artisan make:middleware EnsureTokenIsValid
80. 80
Copyright - Tout droit réservé - OFPPT
PARTIE
1
02 - Utilisation des Middleware
Définition
• Cette commande placera une nouvelle classe EnsureTokenIsValid dans votre répertoire app/Http/Middleware. Dans ce
middleware, nous n'autoriserons l'accès à la route que si l'entrée token fournie correspond à une valeur spécifiée. Sinon,
nous redirigerons les utilisateurs vers l'URI home :
[5] https://code.visualstudio.com/
<?php
namespace AppHttpMiddleware;
use Closure;
class EnsureTokenIsValid
{
/**
* Handle an incoming request.
*
* @param IlluminateHttpRequest $request
* @param Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if ($request->input('token') !== 'my-secret-token') {
return redirect('home');
}
return $next($request);
}
}
81. 81
Copyright - Tout droit réservé - OFPPT
PARTIE
1
02 - Utilisation des Middleware
Définition
• Comme vous pouvez le voir, si le donné token ne correspond pas à notre jeton secret, le middleware renverra une redirection
HTTP au client ; sinon, la demande sera transmise plus loin dans l'application. Pour transmettre la demande plus
profondément dans l'application (permettant au middleware de "passer"), vous devez appeler le rappel $next avec
le $request.
• Il est préférable d'envisager le middleware comme une série de "couches" que les requêtes HTTP doivent traverser avant
d'atteindre votre application. Chaque couche peut examiner la demande et même la rejeter entièrement.
[5] https://code.visualstudio.com/
83. 83
Copyright - Tout droit réservé - OFPPT
PARTIE
1
02 - Utilisation des Middleware
Enregistrement
• Si vous souhaitez qu'un middleware s'exécute lors de chaque requête HTTP adressée à votre application, répertoriez la classe
middleware dans la propriété $middleware de votre classe app/Http/Kernel.php.
[5] https://code.visualstudio.com/
Middleware Globale
84. 84
Copyright - Tout droit réservé - OFPPT
PARTIE
1
02 - Utilisation des Middleware
Enregistrement
• Si vous souhaitez affecter un middleware à des routes spécifiques, vous devez d'abord affecter au middleware une clé dans
le fichier app/Http/Kernel.php de votre application. Par défaut, la propriété $routeMiddleware de cette classe contient des
entrées pour le middleware inclus avec Laravel. Vous pouvez ajouter votre propre middleware à cette liste et lui attribuer une
clé de votre choix :
[5] https://code.visualstudio.com/
Affectation de middleware aux routes
// Within AppHttpKernel class...
protected $routeMiddleware = [
'auth' => AppHttpMiddlewareAuthenticate::class,
'auth.basic' => IlluminateAuthMiddlewareAuthenticateWithBasicAuth::class,
'bindings' => IlluminateRoutingMiddlewareSubstituteBindings::class,
'cache.headers' => IlluminateHttpMiddlewareSetCacheHeaders::class,
'can' => IlluminateAuthMiddlewareAuthorize::class,
'guest' => AppHttpMiddlewareRedirectIfAuthenticated::class,
'signed' => IlluminateRoutingMiddlewareValidateSignature::class,
'throttle' => IlluminateRoutingMiddlewareThrottleRequests::class,
'verified' => IlluminateAuthMiddlewareEnsureEmailIsVerified::class,
];
85. 85
Copyright - Tout droit réservé - OFPPT
PARTIE
1
02 - Utilisation des Middleware
Enregistrement
• Une fois le middleware défini dans le noyau HTTP, vous pouvez utiliser la méthode middleware pour affecter le middleware à
une route :
• Vous pouvez affecter plusieurs middlewares à la route en transmettant un tableau de noms de middlewares à la méthode
middleware :
• Lors de l'attribution du middleware, vous pouvez également transmettre le nom complet de la classe :
[5] https://code.visualstudio.com/
Route::get('/profile', function () {
//
})->middleware('auth');
Route::get('/', function () {
//
})->middleware(['first', 'second']);
use AppHttpMiddlewareEnsureTokenIsValid;
Route::get('/profile', function () {
//
})->middleware(EnsureTokenIsValid::class);
86. 86
Copyright - Tout droit réservé - OFPPT
PARTIE
1
02 - Utilisation des Middleware
Enregistrement
• Lors de l'attribution d'un middleware à un groupe de routes, vous devrez peut-être parfois empêcher le middleware de
s’appliquer sur une route individuelle au sein du groupe. Vous pouvez accomplir cela en utilisant la méthode
withoutMiddleware :
[5] https://code.visualstudio.com/
L’exclusion de middleware
use AppHttpMiddlewareEnsureTokenIsValid;
Route::middleware([EnsureTokenIsValid::class])->group(function () {
Route::get('/', function () {
//
});
Route::get('/profile', function () {
//
})->withoutMiddleware([EnsureTokenIsValid::class]);
});
87. 87
Copyright - Tout droit réservé - OFPPT
PARTIE
1
02 - Utilisation des Middleware
Enregistrement
• Vous pouvez également exclure un ensemble donné de middleware d'un groupe entier de définitions de route :
• La méthode withoutMiddleware ne peut supprimer que le middleware de route et ne s'applique pas au middleware global .
[5] https://code.visualstudio.com/
use AppHttpMiddlewareEnsureTokenIsValid;
Route::withoutMiddleware([EnsureTokenIsValid::class])->group(function () {
Route::get('/profile', function () {
//
});
});
88. 88
Copyright - Tout droit réservé - OFPPT
PARTIE
1
02 - Utilisation des Middleware
Enregistrement
• Parfois, vous souhaiterez peut-être regrouper plusieurs middlewares sous une seule clé pour faciliter leur affectation aux
routes. Vous pouvez accomplir cela en utilisant la propriété $middlewareGroups de votre noyau HTTP.
• Prêt à l'emploi, Laravel est livré avec des groupes middlewares Web et API qui contiennent des middlewares communs que
vous voudrez peut-être appliquer à vos routes Web et API. N'oubliez pas que ces groupes de middleware sont
automatiquement appliqués par le fournisseur de services AppProvidersRouteServiceProvider de votre application aux
routes dans vos fichiers de route Web et API correspondants :
[5] https://code.visualstudio.com/
Groupes de middleware
/**
* The application's route middleware groups.
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
AppHttpMiddlewareEncryptCookies::class,
IlluminateCookieMiddlewareAddQueuedCookiesToR
esponse::class,
IlluminateSessionMiddlewareStartSession::class,
IlluminateViewMiddlewareShareErrorsFromSession::
class,
AppHttpMiddlewareVerifyCsrfToken::class,
IlluminateRoutingMiddlewareSubstituteBindings::cla
ss,
],
'api' => [
'throttle:api',
IlluminateRoutingMiddlewareSubstituteBindings::cla
ss,
],
];
89. 89
Copyright - Tout droit réservé - OFPPT
PARTIE
1
02 - Utilisation des Middleware
Enregistrement
• Les groupes middlewares peuvent être affectés aux routes et aux actions du contrôleur en utilisant la même syntaxe que les
middlewares individuels. Encore une fois, les groupes de middlewares facilitent l'affectation simultanée de plusieurs
middlewares à une route :
[5] https://code.visualstudio.com/
Route::get('/', function () {
//
})->middleware('web');
Route::middleware(['web'])->group(function () {
//
});
90. 90
Copyright - Tout droit réservé - OFPPT
PARTIE
1
02 - Utilisation des Middleware
Enregistrement
• Rarement, vous pouvez avoir besoin que votre middleware s'exécute dans un ordre spécifique, mais sans contrôler leur ordre
lorsqu'ils sont affectés à la route. Dans ce cas, vous pouvez spécifier votre priorité middleware en utilisant la propriété
$middlewarePriority de votre fichier app/Http/Kernel.php. Cette propriété peut ne pas exister dans votre noyau HTTP par
défaut. S'il n'existe pas, vous pouvez copier sa définition par défaut ci-dessous :
[5] https://code.visualstudio.com/
Le tri de middleware
/**
* The priority-sorted list of middleware.
*
* This forces non-global middleware to always be in the
given order.
*
* @var string[]
*/
protected $middlewarePriority = [
IlluminateCookieMiddlewareEncryptCookies::class,
IlluminateSessionMiddlewareStartSession::class,
IlluminateViewMiddlewareShareErrorsFromSession::
class,
IlluminateContractsAuthMiddlewareAuthenticatesR
equests::class,
IlluminateRoutingMiddlewareThrottleRequests::class
,
IlluminateRoutingMiddlewareThrottleRequestsWithR
edis::class,
IlluminateContractsSessionMiddlewareAuthenticate
sSessions::class,
IlluminateRoutingMiddlewareSubstituteBindings::cla
ss,
IlluminateAuthMiddlewareAuthorize::class,
];
92. 92
Copyright - Tout droit réservé - OFPPT
PARTIE
1
02 - Utilisation des Middleware
Paramétrage
• Le middleware peut également recevoir des paramètres supplémentaires. Par exemple, si votre application doit vérifier que
l'utilisateur authentifié a un "rôle" donné avant d'effectuer une action donnée, vous pouvez créer un middleware
EnsureUserHasRole qui reçoit un nom de rôle comme argument supplémentaire.
• Des paramètres middleware supplémentaires seront transmis au middleware après l'argument $next :
<?php
namespace AppHttpMiddleware;
use Closure;
class EnsureUserHasRole
{
/**
* Handle the incoming request.
*
* @param IlluminateHttpRequest $request
* @param Closure $next
* @param string $role
* @return mixed
*/
public function handle($request, Closure $next, $role)
{
if (! $request->user()->hasRole($role)) {
// Redirect...
}
return $next($request);
}
}
93. 93
Copyright - Tout droit réservé - OFPPT
PARTIE
1
02 - Utilisation des Middleware
Paramétrage
• Les paramètres du middleware peuvent être spécifiés lors de la définition de la route en séparant le nom du middleware et les
paramètres par un : . Plusieurs paramètres doivent être délimités par des virgules :
Route::put('/post/{id}', function ($id) {
//
})->middleware('role:editor');
95. 95
Copyright - Tout droit réservé - OFPPT
PARTIE
1
02 - Utilisation des Middleware
Terminate
• Parfois, un middleware peut avoir besoin de faire du travail après que la réponse HTTP a été envoyée au navigateur. Si vous
définissez une méthode terminate sur votre middleware et que votre serveur web utilise FastCGI, la méthode terminate sera
automatiquement appelée après l'envoi de la réponse au navigateur :
<?php
namespace IlluminateSessionMiddleware;
use Closure;
class TerminatingMiddleware
{
/**
* Handle an incoming request.
*
* @param IlluminateHttpRequest $request
* @param Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
return $next($request);
}
/**
* Handle tasks after the response has been sent to the browser.
*
* @param IlluminateHttpRequest $request
* @param IlluminateHttpResponse $response
* @return void
*/
public function terminate($request, $response)
{
// ...
}
}
96. 96
Copyright - Tout droit réservé - OFPPT
PARTIE
1
02 - Utilisation des Middleware
Terminate
• La méthode terminate doit recevoir à la fois la requête et la réponse. Une fois que vous avez défini un middleware
terminable, vous devez l'ajouter à la liste des routes ou middleware global dans le fichier app/Http/Kernel.php.
• Lors de l'appel de la méthode terminate sur votre middleware, Laravel résoudra une nouvelle instance du middleware à partir
du service container . Si vous souhaitez utiliser la même instance de middleware lorsque les méthodes handle et terminate
sont appelées, enregistrez le middleware auprès du conteneur à l'aide de la méthode du conteneur singleton. Généralement,
cela devrait être fait dans la méthode register de votre AppServiceProvider:
use AppHttpMiddlewareTerminatingMiddleware;
/**
* Register any application services.
*
* @return void
*/
public function register()
{
$this->app->singleton(TerminatingMiddleware::class);
}
97. Ce que vous allez apprendre dans ce chapitre :
• Introduction
• Prévenir les requêtes CSRF
• Jeton X-CSRF-Token
• Jeton X-XSRF-Token
05 heure
CHAPITRE 3
Protection CSRF
99. 99
Copyright - Tout droit réservé - OFPPT
PARTIE
1
03 - Protection CSRF
Introduction
• Les falsifications de requêtes intersites sont un type d'exploit malveillant par lequel des commandes non autorisées sont
exécutées au nom d'un utilisateur authentifié. Heureusement, Laravel facilite la protection de votre application contre les
attaques de cross-site request forgery (CSRF)
100. 100
Copyright - Tout droit réservé - OFPPT
PARTIE
1
03 - Protection CSRF
Introduction
• Si vous n'êtes pas familier avec les falsifications de requêtes intersites, discutons d'un exemple de la façon dont cette
vulnérabilité peut être exploitée. Imaginez que votre application dispose d'une route /user/email qui accepte une demande
POST de modification de l'adresse e-mail de l'utilisateur authentifié. Très probablement, cette route s'attend à ce
qu'un champ de saisie email contienne l'adresse e-mail que l'utilisateur souhaite commencer à utiliser.
• Sans protection CSRF, un site Web malveillant pourrait créer un formulaire HTML qui pointe vers la route /user/email de
votre application et soumet la propre adresse e-mail de l'utilisateur malveillant :
• Si le site Web malveillant soumet automatiquement le formulaire lorsque la page est chargée, l'utilisateur malveillant n'a qu'à
attirer un utilisateur sans méfiance de votre application pour qu'il visite son site Web et son adresse e-mail sera modifiée dans
votre application.
• Pour éviter cette vulnérabilité, nous devons inspecter chaque demande entrante POST, PUT, PATCH ou DELETE pour une
valeur de session secrète à laquelle l'application malveillante ne peut pas accéder.
Une explication de la vulnérabilité
<form action="https://your-application.com/user/email" method="POST">
<input type="email" value="malicious-email@example.com">
</form>
<script>
document.forms[0].submit();
</script>
102. 102
Copyright - Tout droit réservé - OFPPT
PARTIE
1
03 - Protection CSRF
Prévenir les requêtes CSRF
• Laravel génère automatiquement un "token" CSRF pour chaque session utilisateur active gérée par l'application. Ce jeton est
utilisé pour vérifier que l'utilisateur authentifié est la personne qui fait réellement les requêtes à l'application. Étant donné
que ce jeton est stocké dans la session de l'utilisateur et change à chaque régénération de la session, une application
malveillante ne peut pas y accéder.
• Le jeton CSRF de la session en cours est accessible via la session de la requête ou via la fonction d'assistance csrf_token :
use IlluminateHttpRequest;
Route::get('/token', function (Request $request) {
$token = $request->session()->token();
$token = csrf_token();
// ...
});
103. 103
Copyright - Tout droit réservé - OFPPT
PARTIE
1
03 - Protection CSRF
Prévenir les requêtes CSRF
• Chaque fois que vous définissez un formulaire HTML "POST", "PUT", "PATCH" ou "DELETE" dans votre application, vous devez
inclure un hamp _tokenc CSRF caché dans le formulaire afin que le middleware de protection CSRF puisse valider la
demande. Pour plus de commodité, vous pouvez utiliser la directive @csrf pour générer le champ de saisie du jeton caché :
• Le middleware AppHttpMiddlewareVerifyCsrfToken , qui est inclus dans le groupe middleware par défaut web, vérifiera
automatiquement que le jeton dans l'entrée de la requête correspond au jeton stocké dans la session. Lorsque ces deux
jetons correspondent, nous savons que l'utilisateur authentifié est celui qui lance la requête.
<form method="POST" action="/profile">
@csrf
<!-- Equivalent to... -->
<input type="hidden" name="_token" value="{{ csrf_token() }}" />
</form>
104. 104
Copyright - Tout droit réservé - OFPPT
PARTIE
1
03 - Protection CSRF
Prévenir les requêtes CSRF
• Parfois, vous souhaiterez peut-être exclure un ensemble d'URI de la protection CSRF. Par exemple, si vous utilisez Stripe pour
traiter les paiements et utilisez leur système de webhook, vous devrez exclure votre route de gestionnaire de webhook Stripe
de la protection CSRF car Stripe ne saura pas quel jeton CSRF envoyer à vos routes.
• En règle générale, vous devez placer ces types de routes en dehors du groupe web de middleware
AppProvidersRouteServiceProvider qui s'applique à toutes les routes du fichier routes/web.php. Cependant, vous pouvez
également exclure les routes en ajoutant leurs URI à la propriété $except du middleware VerifyCsrfToken :
Exclure les URI de la protection CSRF
<?php
namespace AppHttpMiddleware;
use
IlluminateFoundationHttpMiddlewareVerifyCsrfToken
as Middleware;
class VerifyCsrfToken extends Middleware
{
/**
* The URIs that should be excluded from CSRF
verification.
*
* @var array
*/
protected $except = [
'stripe/*',
'http://example.com/foo/bar',
'http://example.com/foo/*',
];
}
106. 106
Copyright - Tout droit réservé - OFPPT
PARTIE
1
03 - Protection CSRF
Jeton X-CSRF-TOKEN
• En plus de vérifier le jeton CSRF en tant que paramètre POST, le middleware AppHttpMiddlewareVerifyCsrfToken vérifiera
également l' en-tête de la requête X-CSRF-TOKEN. Vous pouvez, par exemple, stocker le jeton dans une balise HTML meta :
• Ensuite, vous pouvez demander à une bibliothèque comme jQuery d'ajouter automatiquement le jeton à tous les en-têtes de
requête. Cela fournit une protection CSRF simple et pratique pour vos applications basées sur AJAX utilisant la technologie
JavaScript héritée :
<meta name="csrf-token" content="{{ csrf_token() }}">
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
107. 107
Copyright - Tout droit réservé - OFPPT
PARTIE
1
03 - Protection CSRF
Jeton X-XSRF-Token
• Laravel stocke le jeton CSRF actuel dans un cookie crypté XSRF-TOKEN qui est inclus avec chaque réponse générée par le
framework. Vous pouvez utiliser la valeur du cookie pour définir l'en-tête de la demande X-XSRF-TOKEN.
• Ce cookie est principalement envoyé pour la commodité des développeurs, car certains frameworks et bibliothèques
JavaScript, comme Angular et Axios, placent automatiquement sa valeur dans l'en-tête des requêtes- X-XSRF-TOKEN.
108. Ce que vous allez apprendre dans ce chapitre :
• Intérêt des contrôleurs
• Implémentation de contrôleur
• Contrôleur Middleware
• Contrôleur de ressources
• Injection de dépendances
05 heure
CHAPITRE 4
Manipulation des contrôleurs :
109. CHAPITRE 4
Manipulation des contrôleurs :
1. Intérêt des contrôleurs
2. Implémentation de contrôleur
3. Contrôleur Middleware
4. Contrôleur de ressources
5. Injection de dépendances
110. 110
Copyright - Tout droit réservé - OFPPT
PARTIE
1
04 - Manipulation des contrôleurs :
Intérêt des contrôleurs
• Au lieu de définir toute votre logique de gestion des requêtes comme des fermetures dans vos fichiers de routage, vous
pouvez organiser ce comportement à l'aide de classes "contrôleur". Les contrôleurs peuvent regrouper la logique de gestion
des demandes associées dans une seule classe. Par exemple, une classe UserController peut gérer toutes les demandes
entrantes liées aux utilisateurs, y compris l'affichage, la création, la mise à jour et la suppression d'utilisateurs. Par défaut, les
contrôleurs sont stockés dans le répertoire app/Http/Controllers.
111. CHAPITRE 4
Manipulation des contrôleurs :
1. Intérêt des contrôleurs
2. Implémentation de contrôleur
3. Contrôleur Middleware
4. Contrôleur de ressources
5. Injection de dépendances
112. 112
Copyright - Tout droit réservé - OFPPT
PARTIE
1
04 - Manipulation des contrôleurs :
Implémentation de contrôleur
• Examinons un exemple de contrôleur de base. Notez que le contrôleur étend la classe de contrôleur de base incluse avec
Laravel AppHttpControllersController
Contrôleurs de base
<?php
namespace AppHttpControllers;
use AppHttpControllersController;
use AppModelsUser;
class UserController extends Controller
{
/**
* Show the profile for a given user.
*
* @param int $id
* @return IlluminateViewView
*/
public function show($id)
{
return view('user.profile', [
'user' => User::findOrFail($id)
]);
}
}
113. 113
Copyright - Tout droit réservé - OFPPT
PARTIE
1
04 - Manipulation des contrôleurs :
Implémentation de contrôleur
• Vous pouvez définir une route vers cette méthode de contrôleur comme suit :
• Lorsqu'une requête entrante correspond à l'URI de route spécifié, la méthode show de la classe
AppHttpControllersUserController est appelée et les paramètres de route sont transmis à la méthode.
use AppHttpControllersUserController;
Route::get('/user/{id}', [UserController::class, 'show']);
114. 114
Copyright - Tout droit réservé - OFPPT
PARTIE
1
04 - Manipulation des contrôleurs :
Implémentation de contrôleur
• Si une action de contrôleur est particulièrement complexe, vous trouverez peut-être pratique de dédier une classe de
contrôleur entière à cette action unique. Pour ce faire, vous pouvez définir une seule méthode __invoke dans le contrôleur :
• Lors de l'enregistrement d'itinéraires pour des contrôleurs à action unique, vous n'avez pas besoin de spécifier une méthode
de contrôleur. Au lieu de cela, vous pouvez simplement transmettre le nom du contrôleur au routeur :
Contrôleurs à simple action
<?php
namespace AppHttpControllers;
use AppHttpControllersController;
use AppModelsUser;
class ProvisionServer extends Controller
{
/**
* Provision a new web server.
*
* @return IlluminateHttpResponse
*/
public function __invoke()
{
// ...
}
}
use AppHttpControllersProvisionServer;
Route::post('/server', ProvisionServer::class);
115. 115
Copyright - Tout droit réservé - OFPPT
PARTIE
1
04 - Manipulation des contrôleurs :
Implémentation de contrôleur
• Vous pouvez générer un contrôleur invocable en utilisant l' option --invokable de la commande Artisan make:controller :
php artisan make:controller ProvisionServer --invokable
116. CHAPITRE 4
Manipulation des contrôleurs :
1. Intérêt des contrôleurs
2. Implémentation de contrôleur
3. Contrôleur Middleware
4. Contrôleur de ressources
5. Injection de dépendances
117. 117
Copyright - Tout droit réservé - OFPPT
PARTIE
1
04 - Manipulation des contrôleurs :
Contrôleur Middleware
• Un middleware peut être affecté aux routes du contrôleur dans vos fichiers de routes :
• Ou, vous trouverez peut-être pratique de spécifier un middleware dans le constructeur de votre contrôleur. En utilisant
la méthode middleware dans le constructeur de votre contrôleur, vous pouvez affecter un middleware aux actions du
contrôleur :
Route::get('profile', [UserController::class, 'show'])->middleware('auth');
class UserController extends Controller
{
/**
* Instantiate a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
$this->middleware('log')->only('index');
$this->middleware('subscribed')->except('store');
}
}
118. 118
Copyright - Tout droit réservé - OFPPT
PARTIE
1
04 - Manipulation des contrôleurs :
Contrôleur Middleware
• Les contrôleurs vous permettent également d'enregistrer un middleware à l'aide d'une fermeture. Cela fournit un moyen
pratique de définir un middleware en ligne pour un seul contrôleur sans définir une classe complète de middleware :
$this->middleware(function ($request, $next) {
return $next($request);
});
119. CHAPITRE 4
Manipulation des contrôleurs :
1. Intérêt des contrôleurs
2. Implémentation de contrôleur
3. Contrôleur Middleware
4. Contrôleur de ressources
5. Injection de dépendances
120. 120
Copyright - Tout droit réservé - OFPPT
PARTIE
1
04 - Manipulation des contrôleurs :
Contrôleur de ressources
• Si vous considérez chaque modèle Eloquent de votre application comme une "ressource", il est courant d'effectuer les
mêmes ensembles d'actions sur chaque ressource de votre application. Par exemple, imaginez que votre application
contient un modèle Photo et un modèle Movie. Il est probable que les utilisateurs puissent créer, lire, mettre à jour ou
supprimer ces ressources.
• En raison de ce cas d'utilisation courant, le routage des ressources Laravel attribue les routes typiques de création, lecture,
mise à jour et suppression ("CRUD") à un contrôleur avec une seule ligne de code. Pour commencer, nous pouvons utiliser l'
option make:controller de la commande Artisan --resource pour créer rapidement un contrôleur pour gérer ces actions :
• Cette commande générera un contrôleur à app/Http/Controllers/PhotoController.php. Le contrôleur contiendra une
méthode pour chacune des opérations de ressources disponibles. Ensuite, vous pouvez enregistrer une route de ressources
qui pointe vers le contrôleur :
• Cette déclaration de route unique crée plusieurs routes pour gérer diverses actions sur la ressource. Le contrôleur généré
aura déjà des méthodes stub pour chacune de ces actions. N'oubliez pas que vous pouvez toujours obtenir un aperçu rapide
des routes de votre application en exécutant la commande Artisan route:list.
php artisan make:controller PhotoController --resource
use AppHttpControllersPhotoController;
Route::resource('photos', PhotoController::class);
121. 121
Copyright - Tout droit réservé - OFPPT
PARTIE
1
04 - Manipulation des contrôleurs :
Contrôleur de ressources
• Vous pouvez même enregistrer plusieurs contrôleurs de ressources à la fois en passant un tableau à la méthode resources :
Route::resources([
'photos' => PhotoController::class,
'posts' => PostController::class,
]);
122. 122
Copyright - Tout droit réservé - OFPPT
PARTIE
1
04 - Manipulation des contrôleurs :
Contrôleur de ressources
Actions gérées par le contrôleur de ressources
Verbe URI Action Nom de la route
GET /photos index photos.index
GET /photos/create create photos.create
POST /photos store photos.store
GET /photos/{photo} show photos.show
GET /photos/{photo}/edit edit photos.edit
PUT/PATCH /photos/{photo} update photos.update
DELETE /photos/{photo} destroy photos.destroy
123. 123
Copyright - Tout droit réservé - OFPPT
PARTIE
1
04 - Manipulation des contrôleurs :
Contrôleur de ressources
• En règle générale, une réponse HTTP 404 est générée si un modèle de ressource implicitement lié n'est pas
trouvé. Cependant, vous pouvez personnaliser ce comportement en appelant la méthode missing lors de la définition de
votre route de ressource. La méthode missing accepte une fermeture qui sera invoquée si un modèle lié implicitement ne
peut être trouvé pour aucune des routes de la ressource :
Personnalisation du comportement du modèle manquant
use AppHttpControllersPhotoController;
use IlluminateHttpRequest;
use IlluminateSupportFacadesRedirect;
Route::resource('photos', PhotoController::class)
->missing(function (Request $request) {
return Redirect::route('photos.index');
});
124. 124
Copyright - Tout droit réservé - OFPPT
PARTIE
1
04 - Manipulation des contrôleurs :
Contrôleur de ressources
• Si vous utilisez la liaison de modèle de route et que vous souhaitez que les méthodes du contrôleur de ressources indiquent
le type d'une instance de modèle, vous pouvez utiliser l'option --model lors de la génération du contrôleur :
Spécification du modèle de ressource
php artisan make:controller PhotoController --model=Photo --resource
125. 125
Copyright - Tout droit réservé - OFPPT
PARTIE
1
04 - Manipulation des contrôleurs :
Contrôleur de ressources
• Vous pouvez fournir l'option --requests lors de la génération d'un contrôleur de ressources pour demander à Artisan de
générer des classes de requête de formulaire pour les méthodes de stockage et de mise à jour du contrôleur :
Génération de demandes de formulaire
php artisan make:controller PhotoController --model=Photo --resource --requests
126. 126
Copyright - Tout droit réservé - OFPPT
PARTIE
1
04 - Manipulation des contrôleurs :
Contrôleur de ressources
• Lors de la déclaration d'une route de ressources, vous pouvez spécifier un sous-ensemble d'actions que le contrôleur doit
gérer au lieu de l'ensemble complet d'actions par défaut :
Routes de ressources partielles
use AppHttpControllersPhotoController;
Route::resource('photos', PhotoController::class)->only([
'index', 'show'
]);
Route::resource('photos', PhotoController::class)->except([
'create', 'store', 'update', 'destroy'
]);
127. 127
Copyright - Tout droit réservé - OFPPT
PARTIE
1
04 - Manipulation des contrôleurs :
Contrôleur de ressources
• Lors de la déclaration des routes de ressources qui seront consommées par les API, vous souhaiterez généralement exclure
les routes qui présentent des modèles HTML tels que create et edit. Pour plus de commodité, vous pouvez utiliser
la méthode apiResource pour exclure automatiquement ces deux routes :
• Vous pouvez enregistrer plusieurs contrôleurs de ressources d'API à la fois en passant un tableau à la méthode apiResources :
Itinéraires de ressources d'API
use AppHttpControllersPhotoController;
Route::apiResource('photos', PhotoController::class);
use AppHttpControllersPhotoController;
use AppHttpControllersPostController;
Route::apiResources([
'photos' => PhotoController::class,
'posts' => PostController::class,
]);
128. 128
Copyright - Tout droit réservé - OFPPT
PARTIE
1
04 - Manipulation des contrôleurs :
Contrôleur de ressources
• Pour générer rapidement un contrôleur de ressources d'API qui n'inclut pas les méthodes create ou , utilisez le commutateur
lors de l'exécution de la commande : edit--apimake:controller
php artisan make:controller PhotoController --api
129. 129
Copyright - Tout droit réservé - OFPPT
PARTIE
1
04 - Manipulation des contrôleurs :
Contrôleur de ressources
• Parfois, vous devrez peut-être définir des itinéraires vers une ressource imbriquée. Par exemple, une ressource photo peut
avoir plusieurs commentaires qui peuvent être joints à la photo. Pour imbriquer les contrôleurs de ressources, vous pouvez
utiliser la notation "point" dans votre déclaration de route :
• Cette route enregistrera une ressource imbriquée accessible avec des URI comme suit :
Ressources imbriquées
use AppHttpControllersPhotoCommentController;
Route::resource('photos.comments', PhotoCommentController::class);
/photos/{photo}/comments/{comment}
130. 130
Copyright - Tout droit réservé - OFPPT
PARTIE
1
04 - Manipulation des contrôleurs :
Contrôleur de ressources
• Souvent, il n'est pas tout à fait nécessaire d'avoir à la fois les identifiants parent et enfant dans un URI puisque l'identifiant
enfant est déjà un identifiant unique. Lorsque vous utilisez des identifiants uniques tels que des clés primaires à
incrémentation automatique pour identifier vos modèles dans des segments d'URI, vous pouvez choisir d'utiliser une
"imbrication peu profonde":
Nidification peu profonde
use AppHttpControllersCommentController;
Route::resource('photos.comments', CommentController::class)->shallow();
131. 131
Copyright - Tout droit réservé - OFPPT
PARTIE
1
04 - Manipulation des contrôleurs :
Contrôleur de ressources
• Cette définition de route définira les routes suivantes :
Verbe URI Action Nom de la route
GET /photos/{photo}/comments index photos.comments.index
GET
/photos/{photo}/comments/crea
te
create photos.comments.create
POST /photos/{photo}/comments store photos.comments.store
GET /comments/{comment} show comments.show
GET /comments/{comment}/edit edit comments.edit
PUT/PATCH /comments/{comment} update comments.update
DELETE /comments/{comment} destroy comments.destroy
132. 132
Copyright - Tout droit réservé - OFPPT
PARTIE
1
04 - Manipulation des contrôleurs :
Contrôleur de ressources
• Par défaut, toutes les actions du contrôleur de ressources ont un nom de route ; cependant, vous pouvez remplacer ces
noms en transmettant un tableau names avec les noms de route souhaités :
Nommer les routes de ressources
use AppHttpControllersPhotoController;
Route::resource('photos', PhotoController::class)->names([
'create' => 'photos.build'
]);
133. 133
Copyright - Tout droit réservé - OFPPT
PARTIE
1
04 - Manipulation des contrôleurs :
Contrôleur de ressources
• Par défaut, Route::resource créera les paramètres de route pour vos ressources de route en fonction de la version
"singularisée" du nom de la ressource. Vous pouvez facilement remplacer cela par ressource à l'aide de la méthode
parameters. Le tableau transmis à la méthode parameters doit être un tableau associatif de noms de ressources et de noms
de paramètres :
• L'exemple ci-dessus génère l'URI suivant pour la route de la ressource show :
Nommer les paramètres de route de ressource
use AppHttpControllersAdminUserController;
Route::resource('users', AdminUserController::class)->parameters([
'users' => 'admin_user'
]);
/users/{admin_user}
134. 134
Copyright - Tout droit réservé - OFPPT
PARTIE
1
04 - Manipulation des contrôleurs :
Contrôleur de ressources
• La fonctionnalité de liaison de modèle implicite délimitée de Laravel peut automatiquement délimiter les liaisons imbriquées
de sorte que le modèle enfant résolu soit confirmé comme appartenant au modèle parent. En utilisant la méthode scoped
lors de la définition de votre ressource imbriquée, vous pouvez activer la portée automatique et indiquer à Laravel par quel
champ la ressource enfant doit être récupérée :
• Cette route enregistrera une ressource imbriquée délimitée accessible avec des URI comme suit :
Évaluer les itinéraires des ressources
use AppHttpControllersPhotoCommentController;
Route::resource('photos.comments', PhotoCommentController::class)->scoped([
'comment' => 'slug',
]);
/photos/{photo}/comments/{comment:slug}
135. 135
Copyright - Tout droit réservé - OFPPT
PARTIE
1
04 - Manipulation des contrôleurs :
Contrôleur de ressources
• Par défaut, Route::resource créera des URI de ressource en utilisant des verbes anglais et des règles de pluriel. Si vous avez
besoin de localiser les verbes d'action create et edit , vous pouvez utiliser la méthode Route::resourceVerbs. Cela peut être
fait au début de la méthode boot dans votre application AppProvidersRouteServiceProvider:
Localisation des URI de ressource
/**
* Define your route model bindings, pattern filters, etc.
*
* @return void
*/
public function boot()
{
Route::resourceVerbs([
'create' => 'crear',
'edit' => 'editar',
]);
// ...
}
136. 136
Copyright - Tout droit réservé - OFPPT
PARTIE
1
04 - Manipulation des contrôleurs :
Contrôleur de ressources
• Le pluraliseur de Laravel prend en charge plusieurs langues différentes que vous pouvez configurer en fonction de vos
besoins . Une fois que les verbes et le langage de pluralisation ont été personnalisés, un enregistrement de route de
ressources tel que Route::resource('publicacion', PublicacionController::class) produira les URI suivants :
/publicacion/crear
/publicacion/{publicaciones}/editar
137. 137
Copyright - Tout droit réservé - OFPPT
PARTIE
1
04 - Manipulation des contrôleurs :
Contrôleur de ressources
• Si vous devez ajouter des routes supplémentaires à un contrôleur de ressources au-delà de l'ensemble de routes de
ressources par défaut, vous devez définir ces routes avant votre appel à la méthode Route::resource ; sinon, les routes
définies par la méthode resource peuvent involontairement prendre le pas sur vos routes supplémentaires :
Compléter les contrôleurs de ressources
use AppHttpControllerPhotoController;
Route::get('/photos/popular', [PhotoController::class, 'popular']);
Route::resource('photos', PhotoController::class);
138. CHAPITRE 4
Manipulation des contrôleurs :
1. Intérêt des contrôleurs
2. Implémentation de contrôleur
3. Contrôleur Middleware
4. Contrôleur de ressources
5. Injection de dépendances
139. 139
Copyright - Tout droit réservé - OFPPT
PARTIE
1
04 - Manipulation des contrôleurs :
Injection de dépendances
• Le conteneur de service Laravel est utilisé pour résoudre tous les contrôleurs Laravel. En conséquence, vous pouvez indiquer
toutes les dépendances dont votre contrôleur peut avoir besoin dans son constructeur. Les dépendances déclarées seront
automatiquement résolues et injectées dans l'instance du contrôleur :
Injection de constructeur
<?php
namespace AppHttpControllers;
use AppRepositoriesUserRepository;
class UserController extends Controller
{
/**
* The user repository instance.
*/
protected $users;
/**
* Create a new controller instance.
*
* @param AppRepositoriesUserRepository $users
* @return void
*/
public function __construct(UserRepository $users)
{
$this->users = $users;
}
}
140. 140
Copyright - Tout droit réservé - OFPPT
PARTIE
1
04 - Manipulation des contrôleurs :
Injection de dépendances
• En plus de l'injection de constructeur, vous pouvez également créer des dépendances d'indication de type sur les méthodes
de votre contrôleur. Un cas d'utilisation courant pour l'injection de méthode consiste à injecter
l'instance IlluminateHttpRequest dans les méthodes de votre contrôleur :
Injection de méthode
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class UserController extends Controller
{
/**
* Store a new user.
*
* @param IlluminateHttpRequest $request
* @return IlluminateHttpResponse
*/
public function store(Request $request)
{
$name = $request->name;
//
}
}
141. 141
Copyright - Tout droit réservé - OFPPT
PARTIE
1
04 - Manipulation des contrôleurs :
Injection de dépendances
• Si votre méthode de contrôleur attend également une entrée d'un paramètre de route, lister vos arguments de route après
vos autres dépendances. Par exemple, si votre route est définie comme ceci :
use AppHttpControllersUserController;
Route::put('/user/{id}', [UserController::class, 'update']);
142. 142
Copyright - Tout droit réservé - OFPPT
PARTIE
1
04 - Manipulation des contrôleurs :
Injection de dépendances
• Vous pouvez toujours taper le IlluminateHttpRequest et accéder à votre paramètre id en définissant votre méthode de
contrôleur comme suit :
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class UserController extends Controller
{
/**
* Update the given user.
*
* @param IlluminateHttpRequest $request
* @param string $id
* @return IlluminateHttpResponse
*/
public function update(Request $request, $id)
{
//
}
}
143. Ce que vous allez apprendre dans ce chapitre :
• Introduction
• Interaction avec les requêtes
• Input
• Fichiers
• Configuration des proxys de confiance
• Configuration des hôtes approuvés
05heure
CHAPITRE 5
Manipulation des requêtes HTTP
144. CHAPITRE 5
Manipulation des requêtes HTTP
1. Introduction
2. Interaction avec les requêtes
3. Input
4. Fichiers
5. Configuration des proxys de confiance
6. Configuration des hôtes approuvés
145. 145
Copyright - Tout droit réservé - OFPPT
PARTIE
1
05 - Manipulation des requêtes http :
Introduction
• La classe de Laravel IlluminateHttpRequest fournit un moyen orienté objet d'interagir avec la requête HTTP actuelle gérée
par votre application, ainsi que de récupérer l'entrée, les cookies et les fichiers qui ont été soumis avec la requête.
146. CHAPITRE 5
Manipulation des requêtes HTTP
1. Introduction
2. Interaction avec les requêtes
3. Input
4. Fichiers
5. Configuration des proxys de confiance
6. Configuration des hôtes approuvés
147. 147
Copyright - Tout droit réservé - OFPPT
PARTIE
1
05 - Manipulation des requêtes http :
Interaction avec les requêtes
• Pour obtenir une instance de la requête HTTP actuelle via l'injection de dépendances, vous devez indiquer la classe
IlluminateHttpRequest sur votre méthode de fermeture de route ou de contrôleur. L'instance de requête entrante sera
automatiquement injectée par le conteneur de service Laravel :
Accéder à la demande
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class UserController extends Controller
{
/**
* Store a new user.
*
* @param IlluminateHttpRequest $request
* @return IlluminateHttpResponse
*/
public function store(Request $request)
{
$name = $request->input('name');
//
}
}
148. 148
Copyright - Tout droit réservé - OFPPT
PARTIE
1
05 - Manipulation des requêtes http :
Interaction avec les requêtes
• Comme mentionné, vous pouvez également indiquer la classe IlluminateHttpRequest sur une fermeture d'itinéraire. Le
conteneur de service injectera automatiquement la requête entrante dans la fermeture lors de son exécution :
use IlluminateHttpRequest;
Route::get('/', function (Request $request) {
//
});
149. 149
Copyright - Tout droit réservé - OFPPT
PARTIE
1
05 - Manipulation des requêtes http :
Interaction avec les requêtes
• Si votre méthode de contrôleur attend également une entrée d'un paramètre de route, vous devez lister vos paramètres de
route après vos autres dépendances. Par exemple, si votre route est définie comme ceci :
Paramètres d'injection de dépendance et de routage
use AppHttpControllersUserController;
Route::put('/user/{id}', [UserController::class, 'update']);
150. 150
Copyright - Tout droit réservé - OFPPT
PARTIE
1
05 - Manipulation des requêtes http :
Interaction avec les requêtes
• Vous pouvez toujours taper le IlluminateHttpRequest et accéder à votre paramètre id route en définissant votre méthode
de contrôleur comme suit :
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class UserController extends Controller
{
/**
* Update the specified user.
*
* @param IlluminateHttpRequest $request
* @param string $id
* @return IlluminateHttpResponse
*/
public function update(Request $request, $id)
{
//
}
}
151. 151
Copyright - Tout droit réservé - OFPPT
PARTIE
1
05 - Manipulation des requêtes http :
Interaction avec les requêtes
• La méthode path renvoie les informations de chemin de la requête. Ainsi, si la requête entrante est ciblée
sur http://example.com/foo/bar, la méthode path retournera foo/bar:
Récupération du chemin de la requête
$uri = $request->path();
152. 152
Copyright - Tout droit réservé - OFPPT
PARTIE
1
05 - Manipulation des requêtes http :
Interaction avec les requêtes
• La méthode is vous permet de vérifier que le chemin de la demande entrante correspond à un modèle donné. Vous pouvez
utiliser le caractère * comme caractère générique lors de l'utilisation de cette méthode :
• En utilisant la méthode routeIs, vous pouvez déterminer si la requête entrante correspond à une route nommée :
Inspecter le chemin/la route de la demande
if ($request->is('admin/*')) {
//
}
if ($request->routeIs('admin.*')) {
//
}
153. 153
Copyright - Tout droit réservé - OFPPT
PARTIE
1
05 - Manipulation des requêtes http :
Interaction avec les requêtes
• Pour récupérer l'URL complète de la requête entrante, vous pouvez utiliser les méthodes url ou . fullUrl La méthode url
renverra l'URL sans la chaîne de requête, tandis que la méthode fullUrl inclut la chaîne de requête :
• Si vous souhaitez ajouter des données de chaîne de requête à l'URL actuelle, vous pouvez appeler la méthode
fullUrlWithQuery. Cette méthode fusionne le tableau donné de variables de chaîne de requête avec la chaîne de requête
actuelle :
Récupération de l'URL de la requête
$url = $request->url();
$urlWithQueryString = $request->fullUrl();
$request->fullUrlWithQuery(['type' => 'phone']);
154. 154
Copyright - Tout droit réservé - OFPPT
PARTIE
1
05 - Manipulation des requêtes http :
Interaction avec les requêtes
• Vous pouvez récupérer "l'hôte" de la requête entrante via les méthodes host, httpHost et schemeAndHttpHost:
Récupération de l'hôte de requête
$request->host();
$request->httpHost();
$request->schemeAndHttpHost();
155. 155
Copyright - Tout droit réservé - OFPPT
PARTIE
1
05 - Manipulation des requêtes http :
Interaction avec les requêtes
• La méthode method renverra le verbe HTTP pour la requête. Vous pouvez utiliser la méthode isMethod pour vérifier que le
verbe HTTP correspond à une chaîne donnée :
Récupération de la méthode Request
$method = $request->method();
if ($request->isMethod('post')) {
//
}
156. 156
Copyright - Tout droit réservé - OFPPT
PARTIE
1
05 - Manipulation des requêtes http :
Interaction avec les requêtes
• Vous pouvez récupérer un en-tête de requête à partir de l'instance IlluminateHttpRequest à l'aide de la méthode
header. Si l'en-tête n'est pas présent sur la requête, null sera renvoyé. Cependant, la méthode header accepte un deuxième
argument facultatif qui sera retourné si l'en-tête n'est pas présent sur la requête :
• La méthode hasHeader peut être utilisée pour déterminer si la requête contient un en-tête donné :
En-têtes de demande
$value = $request->header('X-Header-Name');
$value = $request->header('X-Header-Name', 'default');
if ($request->hasHeader('X-Header-Name')) {
//
}
157. 157
Copyright - Tout droit réservé - OFPPT
PARTIE
1
05 - Manipulation des requêtes http :
Interaction avec les requêtes
• Pour plus de commodité, le procédé bearerToken peut être utilisé pour récupérer un jeton de support à partir de l'en-tête
Authorization. Si aucun en-tête de ce type n'est présent, une chaîne vide sera renvoyée :
$token = $request->bearerToken();
158. 158
Copyright - Tout droit réservé - OFPPT
PARTIE
1
05 - Manipulation des requêtes http :
Interaction avec les requêtes
• La méthode ip peut être utilisée pour récupérer l'adresse IP du client qui a fait la requête à votre application :
Demander l'adresse IP
$ipAddress = $request->ip();
159. 159
Copyright - Tout droit réservé - OFPPT
PARTIE
1
05 - Manipulation des requêtes http :
Interaction avec les requêtes
• Laravel fournit plusieurs méthodes pour inspecter les types de contenu demandés par la requête entrante via l' en-tête
Accept. Tout d'abord, la méthode getAcceptableContentTypes renverra un tableau contenant tous les types de contenu
acceptés par la requête :
• La méthode accepts accepte un tableau de types de contenu et renvoie true si l'un des types de contenu est accepté par la requête. Dans le cas contraire, false seront retournés :
• Vous pouvez utiliser la méthode prefers pour déterminer quel type de contenu parmi un tableau donné de types de contenu est le plus préféré par la requête. Si aucun des types de contenu fournis n'est accepté par la requête, null sera renvoyé :
Négociation de contenu
$contentTypes = $request->getAcceptableContentTypes();
if ($request->accepts(['text/html', 'application/json'])) {
// ...
}
$preferred = $request->prefers(['text/html', 'application/json']);
160. 160
Copyright - Tout droit réservé - OFPPT
PARTIE
1
05 - Manipulation des requêtes http :
Interaction avec les requêtes
• Étant donné que de nombreuses applications ne servent que du HTML ou du JSON, vous pouvez utiliser la
méthode expectsJson pour déterminer rapidement si la requête entrante attend une réponse JSON :
if ($request->expectsJson()) {
// ...
}