SlideShare una empresa de Scribd logo
1 de 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
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

Más contenido relacionado

La actualidad más candente

Mini projet individuel php
Mini projet individuel phpMini projet individuel php
Mini projet individuel php
Khadim Mbacké
 

La actualidad más candente (20)

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
 
Angular Avancé
Angular AvancéAngular Avancé
Angular Avancé
 
Appalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPAppalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSP
 
Support de cours angular
Support de cours angularSupport de cours angular
Support de cours angular
 
Ecole ESMA : Projet Fin de semestre - Application de gestion d'une école
Ecole ESMA : Projet Fin de semestre - Application de gestion d'une école Ecole ESMA : Projet Fin de semestre - Application de gestion d'une école
Ecole ESMA : Projet Fin de semestre - Application de gestion d'une école
 
Support de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfiSupport de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfi
 
Rapport de projet de conception et de développement
Rapport de projet de conception et de développementRapport de projet de conception et de développement
Rapport de projet de conception et de développement
 
Support cours angular
Support cours angularSupport cours angular
Support cours angular
 
Support NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDBSupport NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDB
 
Formation PHP
Formation PHPFormation PHP
Formation PHP
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring boot
 
Bases de données réparties par la pratique
Bases de données réparties par la pratiqueBases de données réparties par la pratique
Bases de données réparties par la pratique
 
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
 
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)
 
Mini projet individuel php
Mini projet individuel phpMini projet individuel php
Mini projet individuel php
 
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
 
Rapport- Conception et réalisation d'une plateforme social learning
Rapport- Conception et réalisation d'une plateforme social learningRapport- Conception et réalisation d'une plateforme social learning
Rapport- Conception et réalisation d'une plateforme social learning
 
Support Java Avancé Troisième Partie
Support Java Avancé Troisième PartieSupport Java Avancé Troisième Partie
Support Java Avancé Troisième Partie
 
Support de Cours JSF2 Première partie Intégration avec Spring
Support de Cours JSF2 Première partie Intégration avec SpringSupport de Cours JSF2 Première partie Intégration avec Spring
Support de Cours JSF2 Première partie Intégration avec Spring
 
Support du cours : Programmation Web 2
Support du cours : Programmation Web 2Support du cours : Programmation Web 2
Support du cours : Programmation Web 2
 

Similar a Introduction à Laravel

Introduction à AngularJS
Introduction à AngularJSIntroduction à AngularJS
Introduction à AngularJS
Abdoulaye Dieng
 
Drupal 8, symfony
Drupal 8, symfonyDrupal 8, symfony
Drupal 8, symfony
jeUXdiCode
 
Presentation
PresentationPresentation
Presentation
bois
 
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
HeartKing10
 

Similar a Introduction à Laravel (20)

Introduction à Symfony
Introduction à SymfonyIntroduction à Symfony
Introduction à Symfony
 
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
 

Más de Abdoulaye Dieng

Más de Abdoulaye Dieng (20)

Introduction à React
Introduction à ReactIntroduction à React
Introduction à React
 
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
 
Initiation à Bootstrap
Initiation à BootstrapInitiation à Bootstrap
Initiation à Bootstrap
 
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
 

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

Notas del editor

  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