SlideShare une entreprise Scribd logo

Introduction à Laravel

Objectif général : Prendre en main l’un des frameworks PHP les plus utilisés Objectifs spécifiques Faire correspondre une URL donnée à un traitement précis grâce au routage Regrouper des traitements connexes grâce aux contrôleurs Récupérer les données d’une requête http grâce à Request Retourner des contenus aux formats texte, HTML, JSON, etc. grâce à Response Intégrer des données dans des templates grâce à Blade Interagir avec l’utilisateur grâce aux formulaires Créer, mettre à jour et suivre les évolutions d’un schéma de base de données grâce aux migrations Faciliter la communication avec une base de données grâce à Eloquent

1  sur  59
Introduction
à
M. Abdoulaye DIENG Avril 2021
Objectif général
Prendre en main l’un des frameworks PHP
les plus utilisés
Objectifs spécifiques
• Faire correspondre une URL donnée à un traitement précis
grâce au routage
• Regrouper des traitements connexes grâce aux contrôleurs
• Récupérer les données d’une requête http grâce à Request
• Retourner des contenus aux formats texte, HTML, JSON, etc.
grâce à Response
• Intégrer des données dans des templates grâce à Blade
• Interagir avec l’utilisateur grâce aux formulaires
• Créer, mettre à jour et suivre les évolutions d’un schéma de
base de données grâce aux migrations
• Faciliter la communication avec une base de données grâce
à Eloquent
Sommaire
1) Préliminaires
2) Routage
3) Contrôleurs
4) Requêtes
5) Réponses
6) Vues
7) BDD
Préliminaires
sommaire
1) Qu’est ce qu’un Framework ?
2) Qu’est ce que Laravel ?
3) Prérequis pour installer Laravel
4) Installation de Laravel sous Windows avec Composer
5) Installation de Laravel sous Mac et Linux avec Composer
Préliminaires
Qu’est ce qu’un Framework ?
• Problématiques
Comment développer efficacement (rapidité, bonnes
pratiques, …) une application ?
• Solution : ensemble de composants et de préconisations
« prêt à l’emploi » = Framework
• Avantages d’un Framework
 Structuration du code (modèle MVC)
 Abstraction de la base de données
 Réutilisation de composants éprouvés et approuvés
(Email, Users, …)
 Instauration de bonnes pratiques de codage
 Facilitation de la maintenance et de l’évolution du code
 Facilitation du travail en équipe
 Forte communauté (support et mises à jour) 6

Recommandé

Introduction au Framework Laravel
Introduction au Framework LaravelIntroduction au Framework Laravel
Introduction au Framework LaravelHoucem Hedhly
 
Un exemple élémentaire d'application MVC en PHP
Un exemple élémentaire d'application MVC en PHPUn exemple élémentaire d'application MVC en PHP
Un exemple élémentaire d'application MVC en PHPKristen Le Liboux
 
Alphorm.com Formation Laravel : Construire une Application de A à Z
Alphorm.com Formation Laravel : Construire une Application de A à ZAlphorm.com Formation Laravel : Construire une Application de A à Z
Alphorm.com Formation Laravel : Construire une Application de A à ZAlphorm
 
Android-Tp2: liste et adaptateurs
Android-Tp2: liste et adaptateursAndroid-Tp2: liste et adaptateurs
Android-Tp2: liste et adaptateursLilia Sfaxi
 
Angular Framework présentation PPT LIGHT
Angular Framework présentation PPT LIGHTAngular Framework présentation PPT LIGHT
Angular Framework présentation PPT LIGHTtayebbousfiha1
 
Jsf 110530152515-phpapp01
Jsf 110530152515-phpapp01Jsf 110530152515-phpapp01
Jsf 110530152515-phpapp01Eric Bourdet
 

Contenu connexe

Tendances

Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring bootAntoine Rey
 
Telecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQLTelecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQLwebreaker
 
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)ENSET, Université Hassan II Casablanca
 
Fascicule de tp atelier développement web
Fascicule de tp atelier développement webFascicule de tp atelier développement web
Fascicule de tp atelier développement webHouda TOUKABRI
 
Appalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPAppalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPYouness Boukouchi
 
Introduction aux systèmes répartis
Introduction aux systèmes répartisIntroduction aux systèmes répartis
Introduction aux systèmes répartisHeithem Abbes
 
Laravel 9 comprendre les fondamentaux.
Laravel 9 comprendre les fondamentaux.Laravel 9 comprendre les fondamentaux.
Laravel 9 comprendre les fondamentaux.Valdy Ngouabira
 
Tp1 - WS avec JAXWS
Tp1 - WS avec JAXWSTp1 - WS avec JAXWS
Tp1 - WS avec JAXWSLilia Sfaxi
 
Déploiement d’applications
Déploiement d’applicationsDéploiement d’applications
Déploiement d’applicationsMohammed Jaafar
 
A la découverte de vue.js
A la découverte de vue.jsA la découverte de vue.js
A la découverte de vue.jsBruno Bonnin
 

Tendances (20)

Servlets et JSP
Servlets et JSPServlets et JSP
Servlets et JSP
 
Introduction à React
Introduction à ReactIntroduction à React
Introduction à React
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring boot
 
Telecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQLTelecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQL
 
Support JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.YoussfiSupport JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.Youssfi
 
Support developpement applications mobiles avec ionic v3 et v4
Support developpement applications mobiles avec ionic v3 et v4Support developpement applications mobiles avec ionic v3 et v4
Support developpement applications mobiles avec ionic v3 et v4
 
Cours php
Cours php Cours php
Cours php
 
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
 
Fascicule de tp atelier développement web
Fascicule de tp atelier développement webFascicule de tp atelier développement web
Fascicule de tp atelier développement web
 
Appalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPAppalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSP
 
Introduction aux systèmes répartis
Introduction aux systèmes répartisIntroduction aux systèmes répartis
Introduction aux systèmes répartis
 
Support Web Services SOAP et RESTful Mr YOUSSFI
Support Web Services SOAP et RESTful Mr YOUSSFISupport Web Services SOAP et RESTful Mr YOUSSFI
Support Web Services SOAP et RESTful Mr YOUSSFI
 
Laravel 9 comprendre les fondamentaux.
Laravel 9 comprendre les fondamentaux.Laravel 9 comprendre les fondamentaux.
Laravel 9 comprendre les fondamentaux.
 
Introduction à Angular
Introduction à AngularIntroduction à Angular
Introduction à Angular
 
Tp1 - WS avec JAXWS
Tp1 - WS avec JAXWSTp1 - WS avec JAXWS
Tp1 - WS avec JAXWS
 
Initiation à Bootstrap
Initiation à BootstrapInitiation à Bootstrap
Initiation à Bootstrap
 
Déploiement d’applications
Déploiement d’applicationsDéploiement d’applications
Déploiement d’applications
 
A la découverte de vue.js
A la découverte de vue.jsA la découverte de vue.js
A la découverte de vue.js
 
Support de cours angular
Support de cours angularSupport de cours angular
Support de cours angular
 
Support Java Avancé Troisième Partie
Support Java Avancé Troisième PartieSupport Java Avancé Troisième Partie
Support Java Avancé Troisième Partie
 

Similaire à Introduction à Laravel

Initiation à Express js
Initiation à Express jsInitiation à Express js
Initiation à Express jsAbdoulaye Dieng
 
Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !Olivier Le Goaër
 
"Input/Ouput, 16 ans après" à Devoxx France 2012
"Input/Ouput, 16 ans après" à Devoxx France 2012"Input/Ouput, 16 ans après" à Devoxx France 2012
"Input/Ouput, 16 ans après" à Devoxx France 2012Jean-Michel Doudoux
 
Formation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPFormation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPkemenaran
 
Introduction à AngularJS
Introduction à AngularJSIntroduction à AngularJS
Introduction à AngularJSAbdoulaye Dieng
 
Loucif Redha développement d'applications web - php - my sql
Loucif Redha  développement d'applications web - php - my sqlLoucif Redha  développement d'applications web - php - my sql
Loucif Redha développement d'applications web - php - my sqlRedha LOUCIF
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDOAbdoulaye Dieng
 
Controller_Rest.pptx
Controller_Rest.pptxController_Rest.pptx
Controller_Rest.pptxManalAg
 
Cours php & Mysql - 1ére partie
Cours php & Mysql - 1ére partieCours php & Mysql - 1ére partie
Cours php & Mysql - 1ére partiekadzaki
 
Drupal 8, symfony
Drupal 8, symfonyDrupal 8, symfony
Drupal 8, symfonyjeUXdiCode
 
Fondamentaux d’une API REST
Fondamentaux d’une API RESTFondamentaux d’une API REST
Fondamentaux d’une API RESTAbdoulaye Dieng
 
Presentation
PresentationPresentation
Presentationbois
 
Service WEB de type REST avec Java
Service WEB de type REST avec JavaService WEB de type REST avec Java
Service WEB de type REST avec JavaFrancois ANDRE
 
laravel.sillo.org-Cours Laravel 10 les bases artisan et les contrôleurs_2.pdf
laravel.sillo.org-Cours Laravel 10  les bases  artisan et les contrôleurs_2.pdflaravel.sillo.org-Cours Laravel 10  les bases  artisan et les contrôleurs_2.pdf
laravel.sillo.org-Cours Laravel 10 les bases artisan et les contrôleurs_2.pdfHeartKing10
 

Similaire à Introduction à Laravel (20)

Introduction à Symfony
Introduction à SymfonyIntroduction à Symfony
Introduction à Symfony
 
Initiation à Express js
Initiation à Express jsInitiation à Express js
Initiation à Express js
 
spring.pdf
spring.pdfspring.pdf
spring.pdf
 
Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !
 
"Input/Ouput, 16 ans après" à Devoxx France 2012
"Input/Ouput, 16 ans après" à Devoxx France 2012"Input/Ouput, 16 ans après" à Devoxx France 2012
"Input/Ouput, 16 ans après" à Devoxx France 2012
 
Formation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPFormation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHP
 
Introduction à AngularJS
Introduction à AngularJSIntroduction à AngularJS
Introduction à AngularJS
 
Loucif Redha développement d'applications web - php - my sql
Loucif Redha  développement d'applications web - php - my sqlLoucif Redha  développement d'applications web - php - my sql
Loucif Redha développement d'applications web - php - my sql
 
Services rest & jersey
Services rest & jerseyServices rest & jersey
Services rest & jersey
 
Les Servlets et JSP
Les Servlets et JSPLes Servlets et JSP
Les Servlets et JSP
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDO
 
Controller_Rest.pptx
Controller_Rest.pptxController_Rest.pptx
Controller_Rest.pptx
 
Cours php & Mysql - 1ére partie
Cours php & Mysql - 1ére partieCours php & Mysql - 1ére partie
Cours php & Mysql - 1ére partie
 
Drupal 8, symfony
Drupal 8, symfonyDrupal 8, symfony
Drupal 8, symfony
 
Serveurs
ServeursServeurs
Serveurs
 
Fondamentaux d’une API REST
Fondamentaux d’une API RESTFondamentaux d’une API REST
Fondamentaux d’une API REST
 
Presentation
PresentationPresentation
Presentation
 
Service WEB de type REST avec Java
Service WEB de type REST avec JavaService WEB de type REST avec Java
Service WEB de type REST avec Java
 
laravel.sillo.org-Cours Laravel 10 les bases artisan et les contrôleurs_2.pdf
laravel.sillo.org-Cours Laravel 10  les bases  artisan et les contrôleurs_2.pdflaravel.sillo.org-Cours Laravel 10  les bases  artisan et les contrôleurs_2.pdf
laravel.sillo.org-Cours Laravel 10 les bases artisan et les contrôleurs_2.pdf
 
NIO 2
NIO 2NIO 2
NIO 2
 

Plus de Abdoulaye Dieng

Fondamentaux du Référencement naturel
Fondamentaux du Référencement naturelFondamentaux du Référencement naturel
Fondamentaux du Référencement naturelAbdoulaye Dieng
 
Panorama des Technologies mobiles
Panorama des Technologies mobilesPanorama des Technologies mobiles
Panorama des Technologies mobilesAbdoulaye Dieng
 
Prise en main de WordPress
Prise en main de WordPressPrise en main de WordPress
Prise en main de WordPressAbdoulaye Dieng
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScriptAbdoulaye Dieng
 
Introduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonIntroduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonAbdoulaye Dieng
 
Introduction à React JS
Introduction à React JSIntroduction à React JS
Introduction à React JSAbdoulaye Dieng
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmiqueAbdoulaye Dieng
 
Requêtes HTTP synchrones et asynchrones
Requêtes HTTPsynchrones et asynchronesRequêtes HTTPsynchrones et asynchrones
Requêtes HTTP synchrones et asynchronesAbdoulaye Dieng
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScriptAbdoulaye Dieng
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmiqueAbdoulaye Dieng
 
Cours référencement naturel supdeco techonologie avril-15
Cours référencement naturel supdeco techonologie avril-15Cours référencement naturel supdeco techonologie avril-15
Cours référencement naturel supdeco techonologie avril-15Abdoulaye Dieng
 
Cours CSS feuilles de style en cascade- mars 2015
Cours CSS feuilles de style en cascade- mars 2015Cours CSS feuilles de style en cascade- mars 2015
Cours CSS feuilles de style en cascade- mars 2015Abdoulaye Dieng
 
Architecture ordinateur-echange-de-donnees
Architecture ordinateur-echange-de-donneesArchitecture ordinateur-echange-de-donnees
Architecture ordinateur-echange-de-donneesAbdoulaye Dieng
 
Architecture des ordinateurs : microprocesseur
Architecture des ordinateurs : microprocesseurArchitecture des ordinateurs : microprocesseur
Architecture des ordinateurs : microprocesseurAbdoulaye Dieng
 

Plus de Abdoulaye Dieng (20)

Fondamentaux du Référencement naturel
Fondamentaux du Référencement naturelFondamentaux du Référencement naturel
Fondamentaux du Référencement naturel
 
Panorama des Technologies mobiles
Panorama des Technologies mobilesPanorama des Technologies mobiles
Panorama des Technologies mobiles
 
Prise en main de WordPress
Prise en main de WordPressPrise en main de WordPress
Prise en main de WordPress
 
Initiation à Bootstrap
Initiation à BootstrapInitiation à Bootstrap
Initiation à Bootstrap
 
Introduction à Angular
Introduction à AngularIntroduction à Angular
Introduction à Angular
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
Introduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonIntroduction à l’orienté objet en Python
Introduction à l’orienté objet en Python
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
 
Introduction à React JS
Introduction à React JSIntroduction à React JS
Introduction à React JS
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
 
Requêtes HTTP synchrones et asynchrones
Requêtes HTTPsynchrones et asynchronesRequêtes HTTPsynchrones et asynchrones
Requêtes HTTP synchrones et asynchrones
 
Introduction à jQuery
Introduction à jQueryIntroduction à jQuery
Introduction à jQuery
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
 
Introduction à HTML 5
Introduction à HTML 5Introduction à HTML 5
Introduction à HTML 5
 
introduction à MongoDB
introduction à MongoDBintroduction à MongoDB
introduction à MongoDB
 
Cours référencement naturel supdeco techonologie avril-15
Cours référencement naturel supdeco techonologie avril-15Cours référencement naturel supdeco techonologie avril-15
Cours référencement naturel supdeco techonologie avril-15
 
Cours CSS feuilles de style en cascade- mars 2015
Cours CSS feuilles de style en cascade- mars 2015Cours CSS feuilles de style en cascade- mars 2015
Cours CSS feuilles de style en cascade- mars 2015
 
Architecture ordinateur-echange-de-donnees
Architecture ordinateur-echange-de-donneesArchitecture ordinateur-echange-de-donnees
Architecture ordinateur-echange-de-donnees
 
Architecture des ordinateurs : microprocesseur
Architecture des ordinateurs : microprocesseurArchitecture des ordinateurs : microprocesseur
Architecture des ordinateurs : microprocesseur
 

Introduction à Laravel

  • 2. Objectif général Prendre en main l’un des frameworks PHP les plus utilisés
  • 3. Objectifs spécifiques • Faire correspondre une URL donnée à un traitement précis grâce au routage • Regrouper des traitements connexes grâce aux contrôleurs • Récupérer les données d’une requête http grâce à Request • Retourner des contenus aux formats texte, HTML, JSON, etc. grâce à Response • Intégrer des données dans des templates grâce à Blade • Interagir avec l’utilisateur grâce aux formulaires • Créer, mettre à jour et suivre les évolutions d’un schéma de base de données grâce aux migrations • Faciliter la communication avec une base de données grâce à Eloquent
  • 4. Sommaire 1) Préliminaires 2) Routage 3) Contrôleurs 4) Requêtes 5) Réponses 6) Vues 7) BDD
  • 5. Préliminaires sommaire 1) Qu’est ce qu’un Framework ? 2) Qu’est ce que Laravel ? 3) Prérequis pour installer Laravel 4) Installation de Laravel sous Windows avec Composer 5) Installation de Laravel sous Mac et Linux avec Composer
  • 6. Préliminaires Qu’est ce qu’un Framework ? • Problématiques Comment développer efficacement (rapidité, bonnes pratiques, …) une application ? • Solution : ensemble de composants et de préconisations « prêt à l’emploi » = Framework • Avantages d’un Framework  Structuration du code (modèle MVC)  Abstraction de la base de données  Réutilisation de composants éprouvés et approuvés (Email, Users, …)  Instauration de bonnes pratiques de codage  Facilitation de la maintenance et de l’évolution du code  Facilitation du travail en équipe  Forte communauté (support et mises à jour) 6
  • 7. Préliminaires Qu’est ce que Laravel ? • Laravel est un des Frameworks PHP les plus utilisés • Créé par Taylor Otwell en juin 2011 • Dernière version majeure : 8.0 (Septembre 2020) • Projet PHP le mieux noté de GitHub en 2016 • Laravel reste basé sur Symfony pour au moins 30 % de ses lignes • Concurrencé par Symfony, CodeIgniter, Zend Framework, CakePHP, … 7
  • 8. Préliminaires prérequis pour installer Laravel • Version de PHP (CLI) ≥ 7.1.3 • Activer les extensions PHP suivantes • BCMath • Ctype • JSON • Mbstring • OpenSSL • PDO • Tokenizer • XML 8
  • 9. Préliminaires Installation de Laravel sous Windows avec Composer 1) S’assurer qu’un exécutable php est accessible globalement : chemin d’accès présent dans le PATH NB : une version ≥ 7.4 installe la version 8 de Laravel 2) Télécharger (https://getcomposer.org/Composer-Setup.exe) et exécuter Composer-Setup.exe 3) Créer un nouveau projet Laravel composer create-project laravel/laravel nomDuProjet Exemple : créez le projet nommé « classroom-laravel » 4) Démarrer le projet avec les commandes : cd nomDuProjet/ puis php artisan serve 5) Accéder à la page d’accueil de Laravel à l’adresse http://localhost:8000/ 9
  • 10. Préliminaires Installation de Laravel sous Mac et Linux 1) S’assurer qu’un exécutable php est accessible globalement NB : une version ≥ 7.4 installe la version 8 de Laravel 2) Télécharger la dernière version du composer.phar https://getcomposer.org/download/ 3) Rendre globale puis exécutable la commande composer cp chemin/vers/composer.phar /usr/local/bin/composer sudo chmod +x /usr/local/bin/composer 4) Créer un nouveau projet Laravel composer create-project laravel/laravel nomDuProjet Exemple : créez le projet nommé « classroom-laravel » 5) Démarrer le projet avec les commandes : cd nomDuProjet/ puis php artisan serve 6) Accéder à la page d’accueil de Laravel à l’adresse http://localhost:8000/ 10
  • 11. Routage sommaire 1) Présentation 2) Définition 3) Paramètres de route 4) Paramètres optionnels de route 5) Route nommée 6) Génération d’URL et redirection 11
  • 12. Routage présentation • Pbl : comment accéder à notre application ? • Sol : définir des routes • Routage = faire correspondre une URL donnée à un traitement précis • Intérêt : avoir de belles URL pour un bon référencement Web et un confort des visiteurs Ex : /read/intro-to-laravel au lieu de index.php?article_id=57 • Définition d’une route = motif d’un path d’URL + traitement 12
  • 13. Routage définition • Emplacement fichier « route/web.php » • Syntaxe Route::methodHTTP('chemin', closure); • Exemple Route::get('/', function () { return view('welcome'); }); 13
  • 14. Routage paramètre de route • Pb : peut-on se servir du chemin pour envoyer des données • Sol : un segment variable du chemin • Paramètre de route = segment variable du path • Syntaxes d’ajout du paramètre 1) Suffixer {nomParametre} au path 2) Passer $nomParametre en paramètre à la fonction de rappel • Exemple • Tester les chemins  /hello/VotrePrenom  /hello 14
  • 15. Routage paramètre optionnel de route • Syntaxes d’ajout du paramètre optionnel 1) Suffixer {nomParametre?} au path 2) Passer $nomParametre = valeurParDefaut en paramètre à la fonction de rappel • Exemple • Tester les chemins  /hello/VotrePrenom  /hello 15
  • 16. Routage route nommée • Les routes nommées permettent la génération d’URL et la redirection • Pour nommer une route, il suffit de chaîner la méthode name() à sa définition • Exemple 16
  • 17. Routage génération d’URL et redirection • La génération d’URL permet  d’éviter de « hardcoder » (écrire manuellement) les valeurs des href dans les templates  lorsqu’une URL a changé, de modifier juste la définition de la route • Syntaxes de la génération d’une URL  $url = route('nomDeLaRoute');  Avec paramètre(s) route('nomDeLaRoute',['param' => valeur, …]) • Syntaxes d’une redirection  redirect()->route('nomDeLaRoute');  redirect()->route('nomDeLaRoute', ['param'=>valeur, …]); 17
  • 18. Routage génération d’URL et redirection - Exemple 1) On rappelle que « hello » est le nom de la route de chemin « /hello/{prenom?} » 2) Dans la route de chemin « / », remplacez « view('welcome') » par redirect()->route('hello',['prenom'=>'Redirected User']) 3) Testez le chemin / 18
  • 20. Contrôleurs présentation • Contrôleur : classe qui regroupe des méthodes qui agissent sur la même ressource • Action : fonction ou méthode qui reçoit une requête, la traite et retourne une réponse (texte, HTML, XML, JSON, image, redirection, erreur 404, …) • Pour simplifier certain traitement, le contrôleur peut hériter de la classe Controller 20
  • 21. Contrôleurs définition • Emplacement app/Http/Controllers • Commande de création (à partir de la racine du projet) php artisan make:controller nomContrôleur • Syntaxes de la route Route::methodHTTP('chemin’, [NomController::class, 'nomAction']); ou Route::methodHTTP('chemin’, 'NomController@nomAction'); 21
  • 22. Contrôleurs exemple 1) Lancez la commande (à partir de la racine du projet) php artisan make:controller ApprenantController 2) À la classe ApprenantController ajouter les méthodes public function hello($prenom){ return 'Hello '.$prenom; } public function index(){ return redirect()->route('hello',['prenom'=>'Redirected U } 3) Remplacez toutes les routes par Route::get('/', [ApprenantController::class, 'index’]); Route::get('/hello/{prenom?}’, [ApprenantController::class, 'hello'])->name('hello’); ou Route::get('/', 'ApprenantController@index'); Route::get('/hello/{prenom?}’, 'ApprenantController@hello')->name('hello’); 4) Testez les routes 22
  • 23. Requêtes sommaire 1) Accéder à la requête 2) Récupérer les données de la requête 3) Exemple 23
  • 24. Requêtes accéder à la requête • Une requête HTTP est très souvent accompagnée de données comme les propriétés d’une ressource à ajouter ou à modifier. • le serveur a besoin d’y accéder pour effectuer le traitement adéquat • Pour accéder à la requête via une fonction (closure ou méthode), il suffit de passer en paramètre une instance de Request • Syntaxe : nomFonction(Request $request) • Tout éventuel autre paramètre de la fonction doit être mis après l’instance de Request • NB : importer la classe Request use IlluminateHttpRequest; 24
  • 25. Requêtes Récupérer les données de la requête • Trois façons d’envoyer des données • via la query string • via le chemin (paramètre de route) • via le corps de la requête • $request->all() et $request->input() : récupèrent toutes les données dans un tableau associatif • $request->input('nomDonnée') : récupère la donnée spécifiée • $request->query('nomParamètre') : récupère une donnée de la query string • $request->query() : récupère toutes les données de la query string dans un tableau associatif • $request->nomDonnée : récupère une donnée dans le corps, dans la query string ou dans le chemin • $request->input('nomObjet.nomChamp') : récupère une donnée JSON 25
  • 26. Requêtes exemple 1) Modifiez l’action hello() comme suit 2) Ajoutez la route Route::post('/hello/{prenom}', [ApprenantController::class, 'hello']); 3) Dans app/Http/Middleware/VerifyCsrfToken.php, ajoutez au tableau $except, l’URL 'http://localhost:8000/hello/Abdou?nom=Diop’ 4) Avec un client REST faîtes la requête telle que :  Méthode = POST  URL = http://localhost:8000/hello/Abdou?nom=Diop 26
  • 27. Réponses sommaire 1) Retourner du texte 2) Retourner du JSON a) via un tableau b) via la méthode json() 3) Retourner une instance de Response 4) Retourner une vue 5) Rediriger a) Vers une action d’un contrôleur b) Vers un chemin relatif 6) Exemples 27
  • 28. Réponses retourner ou rediriger • return 'texte à retourner' retourne du texte au format text/html • return tableau ou return response()->json(tableau) retourne du contenu au format JSON • response($contenu, $statusCode) ->header('nomEntête1', $valeur) ->header('nomEntête2', $valeur) retourner une instance de Response avec contenu, code et entêtes • return view('nomVue') retourne une vue • redirect()->action([NomController::class, 'nomAction'], tabAssParam) redirige vers une action avec d’éventuels paramètres • redirect('chemin/de/la/page.html') 28
  • 29. Réponses exemples Exemple 1 1) Dans l’action hello(), retournez alternativement • compact('prenom','nom','age') • response()->json(compact('prenom','nom','age')) • response("Hello $prenom $nom ! Are you $age old ?", 200) ->header('Content-Type', 'text/plain') 2) Testez avec un client REST et vérifiez l’entête « content-type » Exemple 2 1) Dans l’action index(), retournez redirect()->action( [ApprenantController::class, 'hello'], ['prenom'=>'Redirected User', 'nom'=>‘XX', 'age' => 34 ] ) 29
  • 30. Vue sommaire 1) Présentation 2) Créer une vue 3) Retourner une vue via une route 4) Retourner une vue via une fonction 5) Passer des données à une vue 6) Blade a) Présentation b) Expressions c) Structures conditionnelles d) Structures itératives e) Héritage d’un template f) Inclusion d’une vue g) Formulaire 30
  • 31. Vue présentation • Une vue gère la disposition générale des éléments de l’interface ainsi que l’aspect visuel de cette interface • Quelques intérêts  Séparation du traitement et de la présentation le traitement ne « sais pas » comment les données seront affichées la vue ne « sais pas » comment les données sont obtenues  Facilitation du travail en équipe (développeurs & designers) • Emplacement des vues resources/views • Une vue peut contenir du HTML, du CSS, du JavaScript et du PHP (gestion du contenu dynamique) 31
  • 32. Vue retourner une vue • Retourner une vue à partir d’une fonction (closure ou action)  return view('nomVue')  return view('nomVue')->with(variable)  return view('nomVue', tabAss) retourne une vue en lui passant des données • Retourner une vue via une route  Route::view('chemin', 'nomVue')  Route::view('chemin', 'nomVue ', tabAss) • Exemple  Éditer greeting.blade.php <p> <?php echo "Hello $prenom $nom ! Are you $age old ?"; ?> </p>  Dans l’action hello(), retournez view('greeting',compact('prenom','nom','age')) 32
  • 33. Vue Blade - présentation • Blade est un moteur de template • Moteur de template : un programme qui  facilite la gestion du contenu dynamique d’un template  utilise un pseudo-code plus accessible au designer que le PHP  utilise un cache • Blade interprète un pseudo-code pour  afficher la valeur d’une expression PHP avec {{ }}  effectuer plusieurs tâches avec des directives comme @if, @else, @elseif, @switch, @for, @while, @foreach, @forelse, @isset, @empty, @csrf, @method, @include, @yield, @section, @extends, @php, … 33
  • 34. Vue Blade - expression • Syntaxe d’affichage d’une expression {{ expression }} • Exemples  Variable simple : {{ $age }}  Élément d’un tableau : {{ $apprenant['prenom'] }}  Attribut d’un objet : {{ $apprenant ->prenom }}  Dans greeting.blade.php, commenter juste avant echo et ajouter, en dessous, la ligne : Hello {{ $prenom.' '.$nom }} ! Are you {{ $age }} old ? 34
  • 35. Vue Blade – structures conditionnelles • @if (condition) traitement @elseif (condition) traitement @else traitement @endif 35 • @empty($ensDeDonnées) // $ensDeDonnées est vide... @endempty • @if (condition) traitement [@else traitement ] @endif • @isset($ensDeDonnées) // $ensDeDonnées est défini et non vide... @endisset
  • 36. Vue Blade – structures itératives 36 • @for (init; condition; modif) traitement @endfor • @foreach ($ensDeDonnées as $donnée) traitement sur $donnée @endforeach • @forelse ($ensDeDonnées as $donnée) traitement sur $donnée @empty <p> Aucune donnée </p> @endforelse • @while (condition) Traitement @endwhile
  • 37. Vue Blade – exemple sur structures contrôles 3) Ajoutez la route 37 2) Éditez la vue notes.blade.php 1) Ajoutez à ApprenantController
  • 38. Vue Blade – héritage d’un template - parent Le template parent définit • du contenu commun à tous les templates enfants • des sections à remplir ou à compléter par des templates enfants • Syntaxes de définition d’une section  @yield('nomSection' [, 'contenu par défaut'])  @section('nomSection') <p>Contenu par défaut plus élaboré</p> ... @show 38
  • 39. Vue Blade – héritage d’un template - enfant Le template enfant • doit d’abord étendre le template de base @extends('chemin.du.parent') • (re)définit toute section qu’il souhaite remplir en  écrasant son éventuel contenu par défaut o@section('nomSection', 'Contenu de la section') o@section('nomSection') Contenu de la section @endsection  rajoutant du contenu avec @parent • conserve le contenu par défaut de toute section non (re)défini 39
  • 40. Vue Blade – héritage d’un template - exemple Éditez resources/views/layouts/parent.blade.php 40
  • 41. Vue Blade – héritage d’un template - exemple Éditez resources/views/notes.blade.php Rajoutez juste les lignes 1 à 6 et 22 41 Requêter la route « notes »
  • 42. Vue Blade – inclusion d’une vue • @include('chemin.de.la.vue') inclut une vue. La vue a accès à toute variable du template enveloppant. • @include('chemin.de.la.vue', ['nom' => val, …]) inclusion avec passation de données • @includeIf('chemin.de.la.vue', …) inclut si la vue existe • @includeWhen(condition, 'chemin.de.la.vue', …) inclut si une condition est vraie 42
  • 43. Vue Blade – formulaires • @csrf ajoute, en champ caché, le jeton csrf obligatoire au traitement sécurisé du formulaire • method="post" + @method('PUT ou DELETE’) permet au navigateur d’utiliser les méthodes PUT et DELETE 43 Exemple : update.blade.php Exemple : routes à définir
  • 44. Vue Blade – exemple sur formulaires 44
  • 45. BDD sommaire 1) Présentation 2) Configurer la base de données 3) Migration 4) Eloquent 45
  • 46. BDD présentation • Actuellement (avril 2021), Laravel supporte quatre SGBD  MySQL 5.7+  PostgreSQL 9.6+  SQLite 3.8.8+  SQL Server 2017+ • Dans ce cours, nous travaillerons avec MySQL • Exemple dans MySQL, créer la base de données laravel-classroom 46
  • 47. BDD configurer la base de données • Dans /.env, assigner des valeurs aux variables d’environnement : DB_CONNECTION, DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME et DB_PASSWORD • Exemple éditez /.env avec les paramètres suivants : DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT= 3306 DB_DATABASE= laravel-classroom DB_USERNAME= root DB_PASSWORD= 47
  • 48. BDD migration • Une migration permet de créer, de mettre à jour et de suivre les évolutions d’un schéma de base de données. • Commande pour créer une migration php artisan make:migration create_nomTable_table nomTable doit être au pluriel et en minuscules • La migration (au format date_time_create_nomTable_table.php) sera créée dans le dossier database/migrations et contiendra deux méthodes  up() : exécutée lorsque la migration est lancée  down() : exécutée lorsque la migration est annulée • Commande pour lancer les migrations php artisan migrate • Commande pour annuler les migrations php artisan migrate:rollback 48
  • 49. BDD migration - exemple 1) Créer la migration apprenants 2) Rajouter à apprenants les attributs nom (string) et age (integer) 3) Lancer les migrations 49
  • 50. BDD Eloquent - présentation • Eloquent = ORM (Object-Relation Mapping ou correspondance objet-relationnel en fr ) permettant de faciliter la communication avec une base de données • Modèle = classe PHP correspondant à une table de la bdd • Instance (objet) du modèle  enregistrement de la table 50 Table apprenants id prenom age 1 Ali 23 Classe Apprenant id prenom age Objet Apprenant id : 1 prenom : Ali age : 23 O R M
  • 51. BDD Eloquent – définition d’un modèle • Commande de création d’un modèle php artisan make:model NomModele NomModele en UpperCamelCase • Commande de création d’un modèle avec génération d’une migration php artisan make:model NomModel -m • Avec la dernière version, tout modèle est créé par défaut dans le dossier app/Models • Ds certaine version, tout modèle est créé par défaut dans le dossier app • Pour créer un modèle dans un sous-dossier de app, il suffit de le préfixer au nom du modèle • Exemple créez le modèle Apprenant dans app/Models 51
  • 52. BDD Eloquent – persister un nouvel objet • Dans un contrôleur, importer la classe du modèle use AppModelsNomModèle • Dans une action d’un contrôleur 1) créer une nouvelle instance de modèle $nomObjet = new NomModele 2) renseigner les attributs de cet objet $nomObjet->nomAttr = valeur 3) invoquer la méthode save sur l’objet $nomObjet->save() • L’objet inséré reçoit un id récupérable par $nomObjet->id 52
  • 53. BDD Eloquent – exemple pour persister un nouvel objet 53 Dans ApprenantController Dans web.php Requêtez avec un client REST
  • 54. BDD Eloquent – récupérer des objets • Dans un contrôleur, importer la classe du modèle use AppModelsNomModèle • Dans une action d’un contrôleur, récupérer un objet via sa clé primaire $nomObjet = NomModèle::find($id); • Autres méthodes  firstWhere('nomAttr', valeur) : récupérer le 1er objet à partir d’un attribut  where('attr', 'op', val)->firstOr(tabAssAttr?, callback) : récupérer des attributs du 1er objet ou bien appeler une callback  all() : récupérer tous les objets 54
  • 55. BDD Eloquent – exemple pour récupérer un objet par son id 55 Dans ApprenantController Dans web.php Requêtez les chemins « getOne/1 » et « getOne/0 »
  • 56. BDD Eloquent – modifier des objets • Pour modifier un objet 1) Récupérer l’objet 2) Modifier tout attribut souhaité de l’objet 3) Invoquer la méthode save() sur l’objet • Pour modifier plusieurs objets  Invoquer where() et update() sur le modèle  Exemple AppFlight::where('active', 1) ->where('destination', 'San Diego') ->update(['delayed' => 1]); 56
  • 57. BDD Eloquent – exemple sur modifier un objet 57 Requêter le chemin « update/1 » Modifier les actions updateForm() et update()
  • 58. BDD Eloquent – supprimer des objets • Pour supprimer un objet 1) Récupérer l’objet 2) Invoquer la méthode delete() sur l’objet • Pour supprimer un (ou +sieurs) objet(s) via un (ou des) identifiant(s),  invoquer destroy(listeId) sur le modèle  Exemples  Apprenant::destroy(1);  Apprenant::destroy(1, 2, 3); • Pour supprimer plusieurs objets • Invoquer where() et delete() sur le modèle • Ex : AppFlight::where('active', 0)->delete(); 58

Notes de l'éditeur

  1. Installer un client REST pour tester la méthode POST
  2. https://openclassrooms.com/courses/developpez-votre-site-web-avec-le-framework-symfony2/symfony2-un-framework-php http://blog.webodrey.fr/post/utiliser-un-framework-php-est-ce-toujours-un-bon-choix
  3. https://fr.wikipedia.org/wiki/Laravel#cite_note-WebDesignerArticle-1 https://donatix.net/top-companies-use-laravel/
  4. https://laravel.com/docs/6.x#server-requirements Ctype : Vérification des types de caractères  (alpha, alphanum, ctrl, entier, imprimable, minus, maj, blanc, … )
  5. Problème pour l’exécution de la commande « laravel »   Après avoir exécuter la commande composer global require laravel/installer Problème pour l’exécution de la commande « laravel » Message d’erreur : (base) mymacbookpro:.composer macbookpro$ laravel PHP Warning: require(/usr/local/bin/vendor/autoload.php): failed to open stream: No such file or directory in /usr/local/bin/laravel on line 7   Warning: require(/usr/local/bin/vendor/autoload.php): failed to open stream: No such file or directory in /usr/local/bin/laravel on line 7 PHP Fatal error: require(): Failed opening required '/usr/local/bin/vendor/autoload.php' (include_path='.:/usr/local/Cellar/php/7.2.11/share/php/pear') in /usr/local/bin/laravel on line 7   Fatal error: require(): Failed opening required '/usr/local/bin/vendor/autoload.php' (include_path='.:/usr/local/Cellar/php/7.2.11/share/php/pear') in /usr/local/bin/laravel on line 7   Solution Avoir « vendor/autoload.php » dans « /usr/local/bin/ » avec les cmd svtes (base) mymacbookpro:.composer macbookpro$ cp composer.json /usr/local/bin/ (base) mymacbookpro:bin macbookpro$ composer update   NB : « .composer » est dans Home  
  6. Problème pour l’exécution de la commande « laravel »     Après avoir exécuter la commande composer global require laravel/installer Problème pour l’exécution de la commande « laravel » Message d’erreur : (base) mymacbookpro:.composer macbookpro$ laravel PHP Warning: require(/usr/local/bin/vendor/autoload.php): failed to open stream: No such file or directory in /usr/local/bin/laravel on line 7   Warning: require(/usr/local/bin/vendor/autoload.php): failed to open stream: No such file or directory in /usr/local/bin/laravel on line 7 PHP Fatal error: require(): Failed opening required '/usr/local/bin/vendor/autoload.php' (include_path='.:/usr/local/Cellar/php/7.2.11/share/php/pear') in /usr/local/bin/laravel on line 7   Fatal error: require(): Failed opening required '/usr/local/bin/vendor/autoload.php' (include_path='.:/usr/local/Cellar/php/7.2.11/share/php/pear') in /usr/local/bin/laravel on line 7   Solution Avoir « vendor/autoload.php » dans « /usr/local/bin/ » avec les cmd svtes (base) mymacbookpro:.composer macbookpro$ cp composer.json /usr/local/bin/ (base) mymacbookpro:bin macbookpro$ composer update   NB : « .composer » est dans Home  
  7. How to fix Target class does not exist in Laravel 8 Ajouter use App\Http\Controllers\ApprenantController; au fichier des routes ou Décommenter la ligne protected $namespace = 'App\Http\Controllers'; Du fichier app/Providers/RouteServiceProvider.php
  8. https://laravel.com/docs/6.x/requests
  9. https://laravel.com/docs/6.x/requests
  10. https://laravel.com/docs/6.x/requests
  11. https://laravel.com/docs/6.x/requests
  12. Ctype : Vérification des types de caractères  (alpha, alphanum, ctrl, entier, imprimable, minus, maj, blanc, … )
  13. Ctype : Vérification des types de caractères  (alpha, alphanum, ctrl, entier, imprimable, minus, maj, blanc, … )
  14. Ctype : Vérification des types de caractères  (alpha, alphanum, ctrl, entier, imprimable, minus, maj, blanc, … )
  15. Ctype : Vérification des types de caractères  (alpha, alphanum, ctrl, entier, imprimable, minus, maj, blanc, … )
  16. Ctype : Vérification des types de caractères  (alpha, alphanum, ctrl, entier, imprimable, minus, maj, blanc, … )
  17. https://laravel.com/docs/5.8/blade#control-structures
  18. Yield = affiche https://apical.xyz/fiches/la_vue_002/travailler_avec_un_gabarit_de_base_pour_les_vues_app_blade_php_yield_ext___
  19. Yield = affiche https://apical.xyz/fiches/la_vue_002/travailler_avec_un_gabarit_de_base_pour_les_vues_app_blade_php_yield_ext___
  20. Ctype : Vérification des types de caractères  (alpha, alphanum, ctrl, entier, imprimable, minus, maj, blanc, … )
  21. Ctype : Vérification des types de caractères  (alpha, alphanum, ctrl, entier, imprimable, minus, maj, blanc, … )
  22. Ctype : Vérification des types de caractères  (alpha, alphanum, ctrl, entier, imprimable, minus, maj, blanc, … )
  23. Ctype : Vérification des types de caractères  (alpha, alphanum, ctrl, entier, imprimable, minus, maj, blanc, … )
  24. Ctype : Vérification des types de caractères  (alpha, alphanum, ctrl, entier, imprimable, minus, maj, blanc, … )
  25. https://laravel.com/docs/7.x/database
  26. https://laravel.com/docs/7.x/migrations
  27. Problème : lors du lancement des migrations SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table `users` add unique `users_email_unique`(`email`)) Solution https://laravel-news.com/laravel-5-4-key-too-long-error editer AppServiceProvider.php pour ajouter use Illuminate\Support\Facades\Schema; Et ajouter dans la méthode boot() Schema::defaultStringLength(191);
  28. https://laravel.com/docs/7.x/eloquent#introduction
  29. https://laravel.com/docs/7.x/eloquent#defining-models
  30. https://laravel.com/docs/7.x/eloquent#inserts
  31. https://laravel.com/docs/7.x/eloquent#retrieving-single-models
  32. https://laravel.com/docs/7.x/eloquent
  33. https://laravel.com/docs/7.x/eloquent
  34. https://laravel.com/docs/7.x/eloquent