SlideShare une entreprise Scribd logo
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
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
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
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
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
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
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
Routage
définition
• Emplacement
fichier « route/web.php »
• Syntaxe
Route::methodHTTP('chemin', closure);
• Exemple
Route::get('/', function () {
return view('welcome');
});
13
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
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
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
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
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
Contrôleurs
sommaire
1) Présentation
2) Définition
3) Exemple
19
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
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
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
Requêtes
sommaire
1) Accéder à la requête
2) Récupérer les données de la requête
3) Exemple
23
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
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
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
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
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
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
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
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
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
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
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
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
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
Vue
Blade – exemple sur structures contrôles
3) Ajoutez la route
37
2) Éditez la vue notes.blade.php
1) Ajoutez à ApprenantController
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
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
Vue
Blade – héritage d’un template - exemple
Éditez resources/views/layouts/parent.blade.php
40
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 »
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
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
Vue
Blade – exemple sur formulaires
44
BDD
sommaire
1) Présentation
2) Configurer la base de données
3) Migration
4) Eloquent
45
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
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
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
BDD
migration - exemple
1) Créer la migration apprenants
2) Rajouter à apprenants les attributs
nom (string) et age (integer)
3) Lancer les migrations
49
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
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
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
BDD
Eloquent – exemple pour persister un nouvel objet
53
Dans ApprenantController
Dans web.php
Requêtez avec un client REST
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
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 »
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
BDD
Eloquent – exemple sur modifier un objet
57
Requêter le chemin « update/1 »
Modifier les actions updateForm() et update()
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
Référence
• https://laravel.com/docs/8.x
• https://apcpedagogie.com/cours-et-
tutoriels/les_cours/cours-de-programmation/laravel/
• https://walkerspider.com/cours/laravel
Publicité

Contenu connexe

Tendances (20)

Introduction au Framework Laravel
Introduction au Framework LaravelIntroduction au Framework Laravel
Introduction au Framework Laravel
Houcem Hedhly
 
Support de cours Spring M.youssfi
Support de cours Spring  M.youssfiSupport de cours Spring  M.youssfi
Support de cours Spring M.youssfi
ENSET, Université Hassan II Casablanca
 
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
ENSET, Université Hassan II Casablanca
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
Olivier Le Goaër
 
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
 
Servlets et JSP
Servlets et JSPServlets et JSP
Servlets et JSP
Heithem Abbes
 
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 PHP
Kristen Le Liboux
 
Support NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDBSupport NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDB
ENSET, Université Hassan II Casablanca
 
Sécurité des Applications Web avec Json Web Token (JWT)
Sécurité des Applications Web avec Json Web Token (JWT)Sécurité des Applications Web avec Json Web Token (JWT)
Sécurité des Applications Web avec Json Web Token (JWT)
ENSET, Université Hassan II Casablanca
 
Introduction à Symfony
Introduction à SymfonyIntroduction à Symfony
Introduction à Symfony
Abdoulaye Dieng
 
Appalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPAppalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSP
Youness Boukouchi
 
Développement Web - Module 1 - Introduction
Développement Web - Module 1 - IntroductionDéveloppement Web - Module 1 - Introduction
Développement Web - Module 1 - Introduction
Mohammed Amine Mostefai
 
HTML, CSS et Javascript
HTML, CSS et JavascriptHTML, CSS et Javascript
HTML, CSS et Javascript
ECAM Brussels Engineering School
 
Introduction à Node.js
Introduction à Node.js Introduction à Node.js
Introduction à Node.js
Sonam TCHEUTSEUN
 
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
ENSET, Université Hassan II Casablanca
 
Introduction à React JS
Introduction à React JSIntroduction à React JS
Introduction à React JS
Abdoulaye Dieng
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications Java
Antoine Rey
 
Introduction à ASP.NET
Introduction à ASP.NETIntroduction à ASP.NET
Introduction à ASP.NET
Abdelouahed Abdou
 
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
ENSET, Université Hassan II Casablanca
 
Angular Avancé
Angular AvancéAngular Avancé
Angular Avancé
Nizar MAATOUG -ISET Sidi Bouzid
 
Introduction au Framework Laravel
Introduction au Framework LaravelIntroduction au Framework Laravel
Introduction au Framework Laravel
Houcem Hedhly
 
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
 
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 PHP
Kristen Le Liboux
 
Appalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPAppalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSP
Youness Boukouchi
 
Développement Web - Module 1 - Introduction
Développement Web - Module 1 - IntroductionDéveloppement Web - Module 1 - Introduction
Développement Web - Module 1 - Introduction
Mohammed Amine Mostefai
 
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
ENSET, Université Hassan II Casablanca
 
Introduction à React JS
Introduction à React JSIntroduction à React JS
Introduction à React JS
Abdoulaye Dieng
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications Java
Antoine Rey
 

Similaire à Introduction à Laravel (20)

cours-laravel-lpti-dar324-janTEDTF-24.pdf
cours-laravel-lpti-dar324-janTEDTF-24.pdfcours-laravel-lpti-dar324-janTEDTF-24.pdf
cours-laravel-lpti-dar324-janTEDTF-24.pdf
LuneSabsPericolo1
 
Introduction à Symfony
Introduction à SymfonyIntroduction à Symfony
Introduction à Symfony
Abdoulaye Dieng
 
2. Routage Laravel.pptxbbbbbbbbbbbbbbbbb
2. Routage Laravel.pptxbbbbbbbbbbbbbbbbb2. Routage Laravel.pptxbbbbbbbbbbbbbbbbb
2. Routage Laravel.pptxbbbbbbbbbbbbbbbbb
imaneimy0002
 
2. Routage Laravel.pptx hhhhhhhhhhhhhhhhh
2. Routage Laravel.pptx hhhhhhhhhhhhhhhhh2. Routage Laravel.pptx hhhhhhhhhhhhhhhhh
2. Routage Laravel.pptx hhhhhhhhhhhhhhhhh
imaneimy0002
 
Initiation à Express js
Initiation à Express jsInitiation à Express js
Initiation à Express js
Abdoulaye Dieng
 
spring.pdf
spring.pdfspring.pdf
spring.pdf
BouaggadAmine
 
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 2012
Jean-Michel Doudoux
 
Initiation to Laravel Framework 9 est fait pour toute personne qui est à la...
Initiation  to Laravel  Framework 9 est fait pour toute personne qui est à la...Initiation  to Laravel  Framework 9 est fait pour toute personne qui est à la...
Initiation to Laravel Framework 9 est fait pour toute personne qui est à la...
fabiolapandjatchami
 
Formation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPFormation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHP
kemenaran
 
Introduction à AngularJS
Introduction à AngularJSIntroduction à AngularJS
Introduction à AngularJS
Abdoulaye 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 sql
Redha LOUCIF
 
Services rest & jersey
Services rest & jerseyServices rest & jersey
Services rest & jersey
Mathieu Hicauber
 
Les Servlets et JSP
Les Servlets et JSPLes Servlets et JSP
Les Servlets et JSP
Korteby Farouk
 
ch3 - Laravel - Les bases de la pres.pptx
ch3 - Laravel - Les bases de la pres.pptxch3 - Laravel - Les bases de la pres.pptx
ch3 - Laravel - Les bases de la pres.pptx
mohamedkharrat12
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDO
Abdoulaye Dieng
 
Controller_Rest.pptx
Controller_Rest.pptxController_Rest.pptx
Controller_Rest.pptx
ManalAg
 
Cours php & Mysql - 1ére partie
Cours php & Mysql - 1ére partieCours php & Mysql - 1ére partie
Cours php & Mysql - 1ére partie
kadzaki
 
Drupal 8, symfony
Drupal 8, symfonyDrupal 8, symfony
Drupal 8, symfony
jeUXdiCode
 
Serveurs
ServeursServeurs
Serveurs
Doha Smaili
 
cours-laravel-lpti-dar324-janTEDTF-24.pdf
cours-laravel-lpti-dar324-janTEDTF-24.pdfcours-laravel-lpti-dar324-janTEDTF-24.pdf
cours-laravel-lpti-dar324-janTEDTF-24.pdf
LuneSabsPericolo1
 
2. Routage Laravel.pptxbbbbbbbbbbbbbbbbb
2. Routage Laravel.pptxbbbbbbbbbbbbbbbbb2. Routage Laravel.pptxbbbbbbbbbbbbbbbbb
2. Routage Laravel.pptxbbbbbbbbbbbbbbbbb
imaneimy0002
 
2. Routage Laravel.pptx hhhhhhhhhhhhhhhhh
2. Routage Laravel.pptx hhhhhhhhhhhhhhhhh2. Routage Laravel.pptx hhhhhhhhhhhhhhhhh
2. Routage Laravel.pptx hhhhhhhhhhhhhhhhh
imaneimy0002
 
Initiation à Express js
Initiation à Express jsInitiation à Express js
Initiation à Express js
Abdoulaye 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 2012
Jean-Michel Doudoux
 
Initiation to Laravel Framework 9 est fait pour toute personne qui est à la...
Initiation  to Laravel  Framework 9 est fait pour toute personne qui est à la...Initiation  to Laravel  Framework 9 est fait pour toute personne qui est à la...
Initiation to Laravel Framework 9 est fait pour toute personne qui est à la...
fabiolapandjatchami
 
Formation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPFormation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHP
kemenaran
 
Introduction à AngularJS
Introduction à AngularJSIntroduction à AngularJS
Introduction à AngularJS
Abdoulaye 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 sql
Redha LOUCIF
 
ch3 - Laravel - Les bases de la pres.pptx
ch3 - Laravel - Les bases de la pres.pptxch3 - Laravel - Les bases de la pres.pptx
ch3 - Laravel - Les bases de la pres.pptx
mohamedkharrat12
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDO
Abdoulaye Dieng
 
Controller_Rest.pptx
Controller_Rest.pptxController_Rest.pptx
Controller_Rest.pptx
ManalAg
 
Cours php & Mysql - 1ére partie
Cours php & Mysql - 1ére partieCours php & Mysql - 1ére partie
Cours php & Mysql - 1ére partie
kadzaki
 
Drupal 8, symfony
Drupal 8, symfonyDrupal 8, symfony
Drupal 8, symfony
jeUXdiCode
 
Publicité

Plus de Abdoulaye Dieng (20)

Introduction à React
Introduction à ReactIntroduction à React
Introduction à React
Abdoulaye Dieng
 
Fondamentaux du Référencement naturel
Fondamentaux du Référencement naturelFondamentaux du Référencement naturel
Fondamentaux du Référencement naturel
Abdoulaye Dieng
 
Panorama des Technologies mobiles
Panorama des Technologies mobilesPanorama des Technologies mobiles
Panorama des Technologies mobiles
Abdoulaye Dieng
 
Prise en main de WordPress
Prise en main de WordPressPrise en main de WordPress
Prise en main de WordPress
Abdoulaye Dieng
 
Initiation à Bootstrap
Initiation à BootstrapInitiation à Bootstrap
Initiation à Bootstrap
Abdoulaye Dieng
 
Fondamentaux d’une API REST
Fondamentaux d’une API RESTFondamentaux d’une API REST
Fondamentaux d’une API REST
Abdoulaye Dieng
 
Introduction à Angular
Introduction à AngularIntroduction à Angular
Introduction à Angular
Abdoulaye Dieng
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
Abdoulaye Dieng
 
Introduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonIntroduction à l’orienté objet en Python
Introduction à l’orienté objet en Python
Abdoulaye Dieng
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
Abdoulaye Dieng
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
Abdoulaye Dieng
 
Initiation à Bootstrap
Initiation à BootstrapInitiation à Bootstrap
Initiation à Bootstrap
Abdoulaye Dieng
 
Requêtes HTTP synchrones et asynchrones
Requêtes HTTPsynchrones et asynchronesRequêtes HTTPsynchrones et asynchrones
Requêtes HTTP synchrones et asynchrones
Abdoulaye Dieng
 
Introduction à jQuery
Introduction à jQueryIntroduction à jQuery
Introduction à jQuery
Abdoulaye Dieng
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
Abdoulaye Dieng
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
Abdoulaye Dieng
 
Introduction à HTML 5
Introduction à HTML 5Introduction à HTML 5
Introduction à HTML 5
Abdoulaye Dieng
 
introduction à MongoDB
introduction à MongoDBintroduction à MongoDB
introduction à MongoDB
Abdoulaye 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-15
Abdoulaye 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 2015
Abdoulaye Dieng
 
Fondamentaux du Référencement naturel
Fondamentaux du Référencement naturelFondamentaux du Référencement naturel
Fondamentaux du Référencement naturel
Abdoulaye Dieng
 
Panorama des Technologies mobiles
Panorama des Technologies mobilesPanorama des Technologies mobiles
Panorama des Technologies mobiles
Abdoulaye Dieng
 
Prise en main de WordPress
Prise en main de WordPressPrise en main de WordPress
Prise en main de WordPress
Abdoulaye Dieng
 
Fondamentaux d’une API REST
Fondamentaux d’une API RESTFondamentaux d’une API REST
Fondamentaux d’une API REST
Abdoulaye Dieng
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
Abdoulaye Dieng
 
Introduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonIntroduction à l’orienté objet en Python
Introduction à l’orienté objet en Python
Abdoulaye Dieng
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
Abdoulaye Dieng
 
Requêtes HTTP synchrones et asynchrones
Requêtes HTTPsynchrones et asynchronesRequêtes HTTPsynchrones et asynchrones
Requêtes HTTP synchrones et asynchrones
Abdoulaye Dieng
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
Abdoulaye Dieng
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
Abdoulaye 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-15
Abdoulaye 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 2015
Abdoulaye Dieng
 
Publicité

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

  • #6: Installer un client REST pour tester la méthode POST
  • #7: 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
  • #8: https://fr.wikipedia.org/wiki/Laravel#cite_note-WebDesignerArticle-1 https://donatix.net/top-companies-use-laravel/
  • #9: https://laravel.com/docs/6.x#server-requirements Ctype : Vérification des types de caractères  (alpha, alphanum, ctrl, entier, imprimable, minus, maj, blanc, … )
  • #10: 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  
  • #11: 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  
  • #23: 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
  • #24: https://laravel.com/docs/6.x/requests
  • #25: https://laravel.com/docs/6.x/requests
  • #26: https://laravel.com/docs/6.x/requests
  • #27: https://laravel.com/docs/6.x/requests
  • #31: Ctype : Vérification des types de caractères  (alpha, alphanum, ctrl, entier, imprimable, minus, maj, blanc, … )
  • #32: Ctype : Vérification des types de caractères  (alpha, alphanum, ctrl, entier, imprimable, minus, maj, blanc, … )
  • #33: Ctype : Vérification des types de caractères  (alpha, alphanum, ctrl, entier, imprimable, minus, maj, blanc, … )
  • #34: Ctype : Vérification des types de caractères  (alpha, alphanum, ctrl, entier, imprimable, minus, maj, blanc, … )
  • #35: Ctype : Vérification des types de caractères  (alpha, alphanum, ctrl, entier, imprimable, minus, maj, blanc, … )
  • #36: https://laravel.com/docs/5.8/blade#control-structures
  • #39: Yield = affiche https://apical.xyz/fiches/la_vue_002/travailler_avec_un_gabarit_de_base_pour_les_vues_app_blade_php_yield_ext___
  • #40: Yield = affiche https://apical.xyz/fiches/la_vue_002/travailler_avec_un_gabarit_de_base_pour_les_vues_app_blade_php_yield_ext___
  • #41: Ctype : Vérification des types de caractères  (alpha, alphanum, ctrl, entier, imprimable, minus, maj, blanc, … )
  • #42: Ctype : Vérification des types de caractères  (alpha, alphanum, ctrl, entier, imprimable, minus, maj, blanc, … )
  • #43: Ctype : Vérification des types de caractères  (alpha, alphanum, ctrl, entier, imprimable, minus, maj, blanc, … )
  • #44: Ctype : Vérification des types de caractères  (alpha, alphanum, ctrl, entier, imprimable, minus, maj, blanc, … )
  • #45: Ctype : Vérification des types de caractères  (alpha, alphanum, ctrl, entier, imprimable, minus, maj, blanc, … )
  • #47: https://laravel.com/docs/7.x/database
  • #49: https://laravel.com/docs/7.x/migrations
  • #50: 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);
  • #51: https://laravel.com/docs/7.x/eloquent#introduction
  • #52: https://laravel.com/docs/7.x/eloquent#defining-models
  • #53: https://laravel.com/docs/7.x/eloquent#inserts
  • #55: https://laravel.com/docs/7.x/eloquent#retrieving-single-models
  • #57: https://laravel.com/docs/7.x/eloquent
  • #58: https://laravel.com/docs/7.x/eloquent
  • #59: https://laravel.com/docs/7.x/eloquent