Vous êtes sur la page 1sur 35

SUPPORT DE COURS

FOE/FOR/009/- AGREMENT D’ETAT


CT N°683/MESRS/DC/SGMD/DGES/DPES/CTJ/CJ/SA/030SGG20
Version : 02 1ère Université Certifiée ISO 21001 version 2018 dans
l’Afrique Subsaharienne

Initiation à l'usage des Framework

Fagbémy Kamaru deen


LES COURS SONOU
Initiation à l'usage des Framework

Introduction

La création et l’utilisation des frameworks web est issue du besoin de développer rapidement
des applications, en favorisant la réutilisation de code. Cette philosophie « Don't Repeat
Yourself » (DRY) [1] doit faciliter la maintenance, le test et les évolutions d'une application.
Ainsi un framework web propose un espace de travail modulaire, constitué d'un ensemble de
bibliothèques, d'outils et de conventions qui permettent de se concentrer sur la logique
métier de l'application. Il fournit aussi une structure pour l'application, généralement basé sur
l'utilisation du paradigme Modèle Vue Contrôleur [2]. Cela assure une séparation entre :
• le modèle de données qui est en charge de l'accès et des requêtes à la base de données,
• la « vue », qui est une description de la présentation des données (ex : génération du code
HTML, XML, JSON, etc.),
• le contrôleur, qui implémente la logique métier en récupérant les données du modèle pour
les mettre à disposition de la vue

Il existe un grand nombre de frameworks web, écrits dans différents langages qui sont
construits autour du même socle MVC. Cette structuration commune facilite l'apprentissage
et la compréhension d'un framework. Pour autant ils fournissent chacun une implémentation
spécifique qu'il conviendra de prendre en compte pour faire son choix. Après une
présentation générale des concepts d'un framework web nous vous présenterons un retour
d'expérience sur trois des principaux acteurs des frameworks Web

C’est quoi un Framework

En programmation informatique :
▪ Un Framework est un kit de composants logiciels structurels, qui sert à créer les
fondations ainsi que les grandes lignes de tout ou d’une partie d'un logiciel
(architecture).
▪ Un Framework est un ensemble d'outils et de composants logiciels organisés
conformément à un plan d'architecture et des patterns, l'ensemble formant ou
promouvant un squelette de programme.
▪ Un framework ou structure logicielle est un ensemble cohérent de composants
logiciels structurels, qui sert à créer les fondations ainsi que les grandes lignes de tout
ou d’une partie d’un logiciel (architecture).

Un Framework est conçu en vue d'aider les programmeurs dans leur travail en visant la
productivité maximale du programmeur et on trouve différents types de frameworks :

Qu’ont-ils de particulier
Le framework est au développement d’applications ce que les briques de Lego sont à la
construction : ils facilitent beaucoup le travail et permettent d’aller plus vite. Mais comme les
briques Lego, ils obligent le développeur à respecter certaines règles : ils ne sont pas
forcément compatibles avec d’autres briques de construction, ils ne permettent pas de faire
des constructions en bois, etc. Les frameworks peuvent être assez spécifiques et proposer des
fonctionnalités inédites, voire une architecture particulière. La courbe d’apprentissage peut
être plus ou moins raide. L’expertise d’un framework sera une qualité à développer et il
faudra donc préférer ne pas en changer régulièrement

Les frameworks ont plusieurs caractéristiques particulières qui les distinguent du


développement logiciel traditionnel sans framework

Structuration Prédéfinie :

Les frameworks fournissent souvent une structure prédéfinie pour le développement d'une
application. Cela inclut une organisation spécifique des fichiers et des dossiers, ainsi que des
conventions sur la façon dont le code doit être écrit.

Inversion de Contrôle (IoC) :

Les frameworks appliquent souvent le principe d'inversion de contrôle (IoC). Au lieu que le
développeur contrôle le flux d'exécution, c'est le framework qui prend le contrôle et appelle
le code du développeur au moment approprié.

Bibliothèques et Composants Réutilisables :

Les frameworks sont souvent livrés avec des bibliothèques de code préécrit et des
composants réutilisables. Cela permet aux développeurs de gagner du temps en utilisant ces
éléments préexistants plutôt que de recréer des fonctionnalités communes.

Convention sur Configuration :


Les frameworks suivent généralement le principe de "convention sur configuration", où
certaines configurations par défaut sont utilisées sauf si explicitement modifiées par le
développeur. Cela simplifie la configuration et permet une plus grande cohérence.

Abstraction Complexité Technique :

Les frameworks abstraient souvent des détails techniques complexes, ce qui permet aux
développeurs de se concentrer sur la logique métier plutôt que sur la gestion de tâches
techniques détaillées.

Réduction de la Redondance du Code :

En fournissant des modèles de conception et des fonctionnalités prêtes à l'emploi, les


frameworks réduisent la redondance du code. Les développeurs n'ont pas besoin de réécrire
fréquemment le même code pour des fonctionnalités similaires.

Écosystème Développeur :

Les frameworks sont souvent accompagnés d'un écosystème de développeurs actifs, de


documentation, de forums de support et de bibliothèques tierces. Cela favorise la
collaboration, l'apprentissage et le partage de bonnes pratiques au sein de la communauté.

Mises à Jour et Évolution :

Les frameworks évoluent avec le temps pour incorporer de nouvelles fonctionnalités,


améliorer la sécurité, corriger les bugs, et suivre les tendances technologiques. Les mises à
jour régulières maintiennent la pertinence du framework dans le paysage du développement
logiciel.

Prise en Charge de la Sécurité :

Les frameworks incluent souvent des mécanismes intégrés pour traiter les problèmes de
sécurité courants, tels que la protection contre les injections SQL, la gestion des sessions
sécurisées, etc.

Compatibilité et Intégration :

Les frameworks sont conçus pour être compatibles avec d'autres technologies et services. Ils
facilitent l'intégration avec des bases de données, des services web, des frameworks front-
end, etc.

En résumé, les frameworks offrent une structure, des outils, et des conventions pour simplifier
le processus de développement logiciel, permettant aux développeurs de se concentrer sur la
création d'une application plutôt que sur la gestion des détails techniques.
Chapitre 1 : Initiation au Framework

Les Framework Frontend

Une application front-end fonctionne dans un navigateur Web, il est important de bien
comprendre ce que cela implique.

Beaucoup de termes anglais sont utilisés dans le monde de l’informatique. Les faux-amis sont
légions et il nous arrive même de modifier le sens d’un mot pour l’adapter à notre culture.
Dans le développement Web, nous distinguerons deux grandes familles : le back-end et le
front-end. Le back-end rassemble tout ce qui est déployé et servi par un serveur
d’applications (par exemple jetty ou tomcat) ou un serveur HTTP (par exemple nginx ou
caddy). Le front-end, quant à lui, rassemble tout ce qui s’exécute dans le navigateur de
l’utilisateur. Le développement front-end à proprement parler gravite autour du JavaScript ; il
est une des spécialités du monde front-end parmi le graphisme, l’ergonomie, le
développement et l’intégration

LE FONCTIONNEMENT D’UNE APPLICATION FRONT-END

Lorsqu’un utilisateur ouvre son navigateur Internet et qu’il se rend sur une page Web, il est
déjà en train d’utiliser une application front-end. Les différents langages que le navigateur va
interpréter2 sont HTML, CSS et JavaScript. À partir du moment où notre application fournit
du HTML, CSS et JavaScript, le navigateur est mis à contribution pour interpréter ce code,
l’application front-end prend alors vie. Afin de mieux appréhender le fonctionnement d’une
application front-end, il est important de bien comprendre les actions effectuées par le
navigateur web pour afficher une page.

Le navigateur Web
Tous les navigateurs vont fonctionner de la même façon en suivant ces différentes étapes :
--1. téléchargement de la page HTML ;
--2. lecture et analyse du contenu ;
--3. téléchargement des fichiers JS, CSS et images liés en fonction de leur position dans le
HTML ;
--4. lecture et analyse des fichiers JS et CSS.
Notez que les divers téléchargements peuvent s’effectuer de manière synchrone ou
asynchrone.

Lorsque l’utilisateur change de page HTML via un bouton ou un lien, le même processus se
lance pour cette nouvelle page. Si certaines ressources peuvent être mises en cache3 , la
vitesse d’affichage de la page sera plus rapide. Il faut savoir que l’exécution des instructions
HTML est top-down4 et séquentielle. L’exécution des fichiers JS est également séquentielle.
C’est la raison pour laquelle lorsqu’une page charge un fichier JS, le navigateur suspend le
rendu HTML (syndrôme de la page blanche au chargement). On dit que le JavaScript est
bloquant. En revanche, les fichiers CSS peuvent être téléchargés et exécutés simultanément
car toutes les règles CSS sont de toute façon toujours appliquées. Ce qui rend le CSS non
bloquant. C’est dans ce contexte qu’est exécutée notre application front-end

React.js : Utilisé pour la construction d'interfaces utilisateur interactives. React offre une
gestion efficace de l'état de l'application et favorise la création de composants réutilisables.

Angular : Idéal pour le développement d'applications web complexes. Angular fournit une
structure robuste pour organiser le code et propose des fonctionnalités telles que la liaison
bidirectionnelle.

Vue.js : Parfait pour les petites à moyennes applications. Vue.js est simple à intégrer dans des
projets existants et offre une flexibilité pour évoluer vers des applications plus complexes.

Les Framework Backend

Express.js (Node.js) : Parfait pour le développement rapide d'applications back-end légères.


Express simplifie la gestion des routes, des requêtes, et des réponses.

Django (Python) : Excellente option pour le développement back-end avec une approche
"tout-en-un". Il offre une administration automatique, une ORM puissante, et une sécurité
intégrée.

Spring (Java) : Utilisé pour le développement d'applications d'entreprise robustes. Spring


offre une modularité, une gestion de la sécurité, et une intégration aisée avec d'autres
technologies Java.
Le framework est un ensemble de bibliothèques (library) et d’outils donnant un cadre au
développement d’une application. Les concepts logiciels sont souvent bien délimités et on
retrouve souvent dans un framework l’implémentation, plus ou moins stricte, d’une
architecture logicielle.

Quelques Framework populaire

Frameworks Full-Stack :

MEAN Stack (MongoDB, Express.js, Angular, Node.js) : Idéal pour le développement complet
d'applications JavaScript. Il assure une cohérence entre le front-end et le back-end.

MERN Stack (MongoDB, Express.js, React.js, Node.js) : Utilisé pour la création d'applications
JavaScript modernes avec React.js sur le front-end.

Django (Python) avec Django REST Framework : Parfait pour le développement full-stack avec
une API RESTful. Django offre la gestion du back-end tandis que Django REST Framework
simplifie la création d'API.

Frameworks Mobile :

React Native : Utilisé pour le développement d'applications mobiles multiplateformes en


utilisant JavaScript et React. Il permet le partage de code entre les plates-formes iOS et
Android.

Flutter : Excellente option pour le développement d'applications mobiles attrayantes. Flutter


utilise le langage Dart et permet de créer des applications natives pour iOS et Android à
partir d'un seul code source.

Xamarin : Idéal pour le développement d'applications mobiles multiplateformes en utilisant


C#. Il permet le partage de code entre les plates-formes.

Frameworks de Test :

JUnit (Java) : Utilisé pour les tests unitaires dans le développement Java. Il offre des
annotations pour définir les tests et facilite l'automatisation.
pytest (Python) : Excellente option pour les tests unitaires et d'intégration dans le
développement Python. Il est extensible et propose des fonctionnalités avancées.

Jest (JavaScript) : Idéal pour les tests JavaScript, en particulier avec React.js. Jest offre un
ensemble complet d'outils pour les tests unitaires et la couverture du code

Chapitre 2 : Laravel

Le model MVC Le routage Les Modèles


Chapitre 2 : Laravel

Définition et intérêt du framework D’après Wikipédia, un framework informatique est un «


ensemble cohérent de composants logiciels structurels, qui sert à créer les fondations ainsi
que les grandes lignes de tout ou d’une partie d’un logiciel » ; autrement dit, c’est une base
cohérente avec des briques toutes prêtes à disposition. Il existe des frameworks pour tous les
langages de programmation et en particulier pour PHP. En faire la liste serait laborieux tant il
en existe ! L’utilité d’un framework est d’éviter de passer du temps à développer ce qui a déjà
été fait par d’autres, souvent plus compétents, et qui a en plus été utilisé et validé par de
nombreux utilisateurs. On peut imaginer un framework comme un ensemble d’outils à
disposition. Par exemple, si je dois programmer du routage pour mon site, je prends un
composant déjà tout prêt et qui a fait ses preuves et je l’utilise : gain de temps, fiabilité, mise
à jour si nécessaire… Il serait vraiment dommage de se passer d’un framework alors que le
fait d’en utiliser un présente pratiquement uniquement des avantages

Pourquoi Laravel ?

Constitution de Laravel
Laravel, créé par Taylor Otwel, initie une nouvelle façon de concevoir un framework en
utilisant ce qui existe de mieux pour chaque fonctionnalité. Par exemple, toute application
web a besoin d’un système qui gère les requêtes HTTP.

Plutôt que de réinventer quelque chose, le concepteur de Laravel a tout simplement utilisé
celui de Symfony en l’étendant pour créer un système de routage efficace. De la même
manière, l’envoi des courriels se fait avec la bibliothèque SwiftMailer.

En quelque sorte, Otwel a fait son marché parmi toutes les bibliothèques disponibles. Nous
verrons dans cet ouvrage comment cela est réalisé. Néanmoins,

Laravel n’est pas seulement le regroupement de bibliothèques existantes ; c’est aussi un


ensemble de nombreux composants originaux et surtout une orchestration de tout cela. Vous
allez trouver dans Laravel :

Un système de routage perfectionné (RESTFul et ressources) ;

Un créateur de requêtes SQL et un ORM performants ;

Un moteur de templates efficace ;

Un système d’authentification pour les connexions ;


Un système de validation ; • un système de pagination ;

Un système de migration pour les bases de données ;

Un système d’envoi de courriels ;

Un système de cache ;

Un système d’événements ;

Un système d’autorisations ;

Une gestion des sessions…

Et bien d’autres choses encore que nous allons découvrir ensemble.

Il est probable que certains éléments de cette liste ne vous évoquent pas grand-chose, mais
ce n’est pas important pour le moment ; tout cela deviendra plus clair au fil des chapitres.
(La version Laravel 10.3.3, publiée le 13 février 2024, requiert une version minimale de PHP
8.11. Si vous utilisez Laravel 10.3.3, assurez-vous d’avoir PHP 8.1 ou une version supérieure
installée sur votre serveur. Si vous avez besoin d’aide pour mettre à jour votre version de
PHP, n’hésitez pas à demander ! 😊)

Le meilleur de PHP

Plonger dans le code de Laravel, c’est recevoir un cours de programmation tant le style est
clair et élégant et le code merveilleusement organisé. La version actuelle de Laravel est la
10.3.3 / 13 February 2024 et nécessite au minimum la version 8.1. de PHP. Pour aborder de
façon efficace ce framework, il est souhaitable de se familiariser avec les notions suivantes

Les espaces de noms : c’est une façon de bien ranger le code pour éviter des conflits de
nommage. Laravel utilise cette possibilité de façon intensive. Tous les composants sont
rangés dans des espaces de noms distincts, de même que l’application créée.

Les fonctions anonymes : ce sont des fonctions sans nom (souvent appelées closures) qui
améliorent le code. Les utilisateurs de JavaScript y sont habitués, ceux de PHP un peu moins
parce qu’elles y sont plus récentes. Laravel les utilise aussi de façon systématique.

Les méthodes magiques : ce sont des méthodes qui n’ont pas été explicitement décrites dans
une classe, mais qui peuvent être appelées et résolues.

Les interfaces : une interface est un contrat de constitution des classes. En programmation
objet, c’est le sommet de la hiérarchie. Tous les composants de Laravel sont fondés sur des
interfaces. La version 5 a même vu apparaître un lot de contrats pour étendre de façon
sereine le framework.
Les traits : c’est une façon d’ajouter des propriétés et méthodes à une classe sans passer par
l’héritage, ce qui aide à passer outre certaines limitations de l’héritage simple proposé par
défaut par PHP

Un framework n’est pas fait pour remplacer la connaissance d’un langage, mais
pour assister celui (ou celle) qui connaît déjà bien ce langage. Si vous avez des
lacunes, il vaut mieux les combler pour profiter pleinement de Laravel

Documentation

Quand on s’intéresse à un framework, il ne suffit pas qu’il soit riche et performant ; il faut
aussi que la documentation soit à la hauteur. C’est le cas pour Laravel. Vous trouverez la
documentation sur le site officiel https://laravel.com/, mais il existe de plus en plus d’autres
sources, dont voici les principales :

https://laravel.fr/ : site d’entraide francophone avec un forum actif ;

http://laravel.io/ : le forum officiel ;

http://laravel.sillo.org/ : mon blog créé début 2013 et toujours actif, qui constitue une
initiation progressive complémentaire du présent ouvrage ;

http://cheats.jesse-obrien.ca/ : une page bien pratique qui résume toutes les commandes ;

http://www.laravel-tricks.com/ : un autre site d’astuces ;

http://packalyst.com/ : le rassemblement de tous les packages pour ajouter des


fonctionnalités à Laravel ;

https://laracasts.com/ : de nombreux tutoriels vidéo en anglais, dont un certain nombre en


accès gratuit, notamment une série complète pour Laravel 10 : https://laracasts.com/
series/laravel-10-fundamentals.

Il existe aussi de bons livres, mais ils sont tous en anglais.

Le model MVC

Définitions de MVC
On peut difficilement parler d’un
framework sans évoquer le patron
Modèle-Vue-Contrôleur. Pour
certains, il s’agit de la clé de voûte
de toute application rigoureuse ;
pour d’autres, c’est une contrainte
qui empêche d’organiser
judicieusement son code.
C’est un modèle d’organisation du code.

▪ Le modèle est chargé de gérer les données.


▪ La vue est chargée de la mise en forme pour l’utilisateur.
▪ Le contrôleur est chargé de gérer l’ensemble.

En général, on résume en disant que le modèle gère la base de données, la vue produit les
pages HTML et le contrôleur fait tout le reste. Plus précisément, détaillons cette organisation
dans Laravel.

- Le modèle correspond à une table d’une base de données. C’est une classe qui étend la
classe Model, qui gère simplement et efficacement les manipulations de données et
l’établissement automatisé de relations entre tables.

- Le contrôleur se décline en deux catégories : contrôleur classique et contrôleur de


ressource (je détaillerai évidemment tout cela dans cet ouvrage).

- La vue est soit un simple fichier avec du code HTML, soit un fichier utilisant le système de
templates Blade de Laravel.

Laravel propose ce modèle mais ne l’impose pas. Nous verrons d’ailleurs qu’il est parfois
judicieux de s’en éloigner, parce qu’il y a plusieurs choses qu’on n’arrive pas à caser dans ce
modèle. Par exemple, si je dois envoyer des emails, où vais-je placer mon code ? En général,
ce qui se produit est l’inflation des contrôleurs auxquels on demande des rôles pour lesquels
ils ne sont pas faits

Popularité
Laravel s’est établi en quelques années au sommet de l’usage des frameworks PHP. Voici des
statistiques assez récentes basées sur la popularité :
En résumé

Un framework fait gagner du temps et donne l’assurance de disposer de composants bien


codés et fiables.

Laravel est un framework novateur, complet, qui utilise les possibilités les plus récentes de
PHP et qui est impeccablement codé et organisé.

La documentation de Laravel est complète, précise et de plus en plus de tutoriels et exemples


apparaissent sur la toile.

Laravel adopte le patron MVC, mais ne l’impose pas. Il est totalement orienté objet.

Le routage

Dans cette session nous allons voir ensemble le fonctionnement du Routing qui va permettre à
Laravel de faire correspondre à une URL particulière un bout de code spécifique. Pour utiliser le
système de Routing, on va se rendre dans le dossier routes et on va modifier le fichier web.php.
A l'intérieur de ce fichier-là, on voit qu'il y a déjà une route de définie.
Les routes sont définies en utilisant la classe Illuminate\Support\Facades\Route. Pour définir un
nouveau chemin on utilisera une méthode qui a le même nom que la méthode HTTP. Ensuite,
on mettra en premier paramètre l'URL, et en second paramètre une fonction qui permettra
d'expliquer comment répondre.

Donc là, par exemple, cette route se traduit de la manière suivante : "lorsque j'accède à la
page racine, il faut que tu répondes en retournant une vue qui s'appelle welcome. On parlera
des vues un peu plus tard, mais les vues c'est simplement des fichiers PHP un qui permettent
de générer le rendu HTML. Donc si je regarde dans le dossier "resources", on va avoir dans le
dossier "view" un fichier "welcome.blade.php" qui va contenir simplement le code HTML que
l'on voit à l'écran lorsque je me rends sur la page d'accueil.

Ce système de Routing va nous permettre de déclarer de nouvelles routes. Dans mon cas,
j'aimerais répondre à la route "/blog". Pour cela, on va utiliser la même classe, on va répondre
nous aussi à la méthode get, on mettra notre URL "/blog" et ensuite on définira une fonction.
Vu qu'on n'a pas encore vu les vues, on va se contenter de retourner une chaîne de caractère
qui dit "bonjour".

Si vous renvoyez une chaîne de caractère, automatiquement Laravel va renvoyer les bonnes
en tête et ce code va être affiché au niveau du navigateur comme une page HTML.

Ce qui est intéressant, c'est que si jamais on décide de retourner quelque chose qui ne peut
pas être converti sous forme de chaîne de caractère, par exemple un tableau, dans ce cas là, il
va renvoyer une en tête de type "JSON", et il va convertir notre tableau PHP en "json" qu'il va
ensuite renvoyer au navigateur.
Par défaut, il est assez intelligent pour savoir quel type de réponse il doit donner en fonction du
type de retour de notre fonction.

Objet Request

Maintenant, comment ça se passe si on veut gérer des paramètre dans l'url ? Par
exemple ?name=john. Par défaut, ce qu'on ferait dans une application PHP standard,
c'est qu'on mettrait un appel à $_GET et on irait récupérer la clef name. Ce n'est pas la
bonne manière de faire ça dans le cadre d'une application Laravel. Avec le framework,
lorsque j'utilise une fonction, je peux lui injecter un paramètre supplémentaire qui va
permettre de récupérer les informations sur la requête. Ce paramètre devra être de
type Illuminate\Http\Request.

On retrouvera pas mal de méthode utiles sur cet objet Request. Pour récupérer les
paramètres on a 2 méthodes qui vont être intéréssantes.

all(), permet de récupérer tous les paramètres sous forme de tableau

input($key), permet de récupérer un paramètre spécifiquement et renverra null si il


n'existe pas

URL dynamiques

Maintenant, ce qu'on aimerait bien faire c'est avoir des URLs qui soient plus proches
de la réalité. Par exemple, si je me rends sur un blog, souvent les urls des articles
contiennent un slug suivi d'un ID.
Et on aimerait bien faire pareil avec notre Routing, pour cela on va déclarer une nouvelle
route qui aura des paramètres mis entre accolades.

Si maintenant je veux récupérer ces paramètres dans l'URL, je peux le faire en utilisant les
paramètres de ma fonction.

Dans le cas où on utilise des paramètres on peut aussi utiliser des expression régulières pour
contraindre le format attendu à l'aide de la méthode where.

Route nommée

Lorsque l'on définit une route dans Laravel on a la possibilité de la nommer à l'aide de la
méthode name().
Ce nommage permet ensuite de générer des liens automatiquement à l'aide de la
méthode route().

Groupe de routes

Si plusieurs routes ont des informations communes il est possible de les grouper ensemble.

Définition de routes et de paramètres.

Dans Laravel, la définition de routes et de paramètres est une étape essentielle pour définir le
comportement de votre application web. Voici comment vous pouvez définir des routes avec
des paramètres dans Laravel :

1. Routes Simples :
Ouvrez le fichier routes/web.php pour définir vos routes. Utilisez la fonction Route::get,
Route::post, ou d'autres méthodes de routage selon le type de requête HTTP que vous
souhaitez traiter.

use Illuminate\Support\Facades\Route;

Route::get('/', function () {

return 'Bienvenue sur la page d\'accueil !';

});

Route::get('/about', function () {

return 'À propos de nous.';

});
2. Routes avec Paramètres :
Vous pouvez inclure des paramètres dans vos routes en les plaçant entre accolades {}. Ces
paramètres seront ensuite transmis à la fonction de rappel (closure) de votre route.

use Illuminate\Support\Facades\Route;

Route::get('/user/{id}', function ($id) {

return 'ID de l\'utilisateur : ' . $id;

});

Route::get('/post/{category}/{slug}', function ($category, $slug) {

return "Catégorie : $category, Slug : $slug";

});

Dans cet exemple, les routes /user/{id} et /post/{category}/{slug} incluent des paramètres
dans l'URL. Les valeurs de ces paramètres seront transmises à la fonction de rappel en tant
qu'arguments.

3. Routes avec Paramètres Optionnels :


Vous pouvez rendre les paramètres optionnels en leur attribuant une valeur par défaut dans
la fonction de rappel.

use Illuminate\Support\Facades\Route;

Route::get('/user/{name?}', function ($name = 'Invité') {

return 'Bonjour, ' . $name;

});

Dans cet exemple, le paramètre {name?} est rendu optionnel, et s'il n'est pas fourni dans
l'URL, il prend la valeur par défaut de 'Invité'.

4. Contraintes de Paramètres :
Vous pouvez appliquer des contraintes aux paramètres en utilisant la syntaxe where. Par
exemple, vous pouvez spécifier que le paramètre doit être un nombre.

use Illuminate\Support\Facades\Route;

Route::get('/user/{id}', function ($id) {

return 'ID de l\'utilisateur : ' . $id;


})->where('id', '[0-9]+');

Dans cet exemple, la contrainte where('id', '[0-9]+') indique que le paramètre id doit être un
nombre.

5. Nommage de Routes :
Il est souvent utile de nommer vos routes, ce qui facilite la génération d'URL dans votre
application. Vous pouvez nommer une route en utilisant la méthode name.

use Illuminate\Support\Facades\Route;

Route::get('/dashboard', function () {

return 'Tableau de bord de l\'utilisateur';

})->name('dashboard');

Vous pouvez ensuite générer l'URL nommée dans votre application avec la fonction route.

$url = route('dashboard');

6. Groupement de Routes :
Vous pouvez regrouper des routes pour appliquer des filtres, des middlewares, ou d'autres
configurations à plusieurs routes.

use Illuminate\Support\Facades\Route;

Route::middleware(['auth'])->group(function () {

Route::get('/dashboard', function () {

return 'Tableau de bord de l\'utilisateur';

});

Route::get('/profile', function () {

return 'Profil de l\'utilisateur';

});

});

Cela applique le middleware auth à toutes les routes du groupe.

7. Documentation Officielle :
Pour en savoir plus sur les possibilités de routage dans Laravel, consultez la documentation
officielle : Documentation Routage Laravel.

Regroupement de routes.

Dans Laravel, le regroupement de routes est une pratique courante pour organiser et
appliquer des configurations spécifiques à plusieurs routes. Cela permet de simplifier la
gestion des routes similaires et d'appliquer des middlewares, des filtres ou d'autres
configurations de manière groupée. Voici comment regrouper des routes dans Laravel :

1. Groupe de Routes Basique :


Vous pouvez utiliser la méthode group pour créer un groupe de routes dans le fichier
routes/web.php . Par exemple, regroupons certaines routes sous le préfixe /admin :

use Illuminate\Support\Facades\Route;

Route::prefix('admin')->group(function () {

Route::get('/dashboard', function () {

return 'Tableau de bord de l\'administrateur';

});

Route::get('/users', function () {

return 'Liste des utilisateurs';

});

});

Dans cet exemple, toutes les routes du groupe auront le préfixe /admin. Ainsi, l'URL pour le
tableau de bord serait /admin/dashboard .

2. Nommage et Middleware :
Vous pouvez également nommer un groupe de routes et appliquer des middlewares
spécifiques à ce groupe :

use Illuminate\Support\Facades\Route;

Route::middleware(['auth', 'admin'])->group(function () {

Route::get('/dashboard', function () {

return 'Tableau de bord protégé';


})->name('admin.dashboard');

Route::get('/users', function () {

return 'Liste des utilisateurs';

})->name('admin.users');

});

Dans cet exemple, les routes du groupe ont le middleware auth et admin appliqué. De plus,
elles sont nommées pour faciliter la génération d'URL dans le reste de l'application.

3. Groupe avec Paramètres Communs :


Vous pouvez également définir des paramètres communs pour un groupe de routes, par
exemple, pour partager un préfixe dans les contrôleurs :

use App\Http\Controllers\Admin\DashboardController;

use App\Http\Controllers\Admin\UsersController;

use Illuminate\Support\Facades\Route;

Route::prefix('admin')->group(function () {

Route::get('/dashboard', [DashboardController::class, 'index'])-


>name('admin.dashboard');

Route::get('/users', [UsersController::class, 'index'])->name('admin.users');

});

Ici, nous utilisons des contrôleurs pour les actions liées aux routes, et le groupe de routes
utilise un préfixe commun pour toutes les routes.

4. Groupe avec Paramètres Dynamiques :


Vous pouvez également utiliser des paramètres dynamiques pour les groupes de routes. Par
exemple, pour un groupe de routes avec un ID d'utilisateur :

use Illuminate\Support\Facades\Route;

Route::prefix('user/{user_id}')->group(function () {

Route::get('/profile', function ($user_id) {

return 'Profil de l\'utilisateur ' . $user_id;

})->name('user.profile');
});

5. Middleware de Groupe :
Si vous avez plusieurs routes nécessitant le même middleware, vous pouvez également
appliquer le middleware au niveau du groupe :

use Illuminate\Support\Facades\Route;

Route::middleware(['auth'])->group(function () {

Route::get('/dashboard', function () {

return 'Tableau de bord protégé';

});

Route::get('/profile', function () {

return 'Profil de l\'utilisateur';

});

});

6. Documentation Officielle :
Pour des informations plus détaillées sur le regroupement de routes dans Laravel, vous
pouvez consulter la documentation officielle : Documentation Regroupement de Routes
Laravel.

Le regroupement de routes est une technique puissante pour organiser votre code et
appliquer des configurations de manière cohérente à plusieurs routes dans votre application
Laravel.

Routes nommées.

Les routes nommées dans Laravel permettent de donner un nom spécifique à une route, ce
qui simplifie la génération d'URLs et améliore la lisibilité du code. Voici comment définir et
utiliser des routes nommées dans Laravel :

1. Définition d'une Route Nommée :


Pour nommer une route, utilisez la méthode name après avoir défini la route.

use Illuminate \ Support \ Facades \ Route ; Route :: get ( '/dashboard' ,


function () { return 'Tableau de bord' ; })-
> name ( 'dashboard' );
Dans cet exemple, la route a été nommée 'dashboard'. Vous pouvez choisir n'importe quel
nom significatif pour votre route.

2. Utilisation d'une Route Nommée :


Une fois que la route est nommée, vous pouvez l'utiliser pour générer des URLs dans votre
application. Utilisez la fonction route dans votre code ou les méthodes route dans les vues.

L'ORM Eloquent

Dans cette session nous allons découvrir ensemble comment communiquer avec une base de
données avec Laravel et son ORM Eloquent.

Un ORM, si vous n'avez jamais entendu parler, c'est le diminutif


de Object Relational Mapping, ce sont des classes qui vont nous permettre d'interagir avec
les données en base de données et qui vont permettre de les représenter sous forme d'objet.
Vous allez le voir, c'est plutôt simple à l'utilisation une fois que l'on a compris le principe.

Pour commencer il va falloir configurer la base de données qu'on souhaite utiliser. Dans
notre cas on va utiliser la base de données la plus simple à configurer : SQLite (Laravel
supporte MySQL, MariaDB, PostgreSQL et SQL Server). Pour mettre en place SQLite, on va
modifier le fichier d'environnement (le fichier .env) et au niveau de la
partie DB_CONNECTION, on va mettre "sqlite" et on va retirer les autres informations.

Migration

Dans notre cas, on souhaite pouvoir interagir avec notre base de données pour créer un
système d'articles. Il nous faudra commencer par créer la table et les différents champs
nécessaire et on n'aura pas nécessairement besoin d'utiliser du SQL. On pourra utiliser le
système de migration de Laravel. Pour cela, on va se rendre dans le terminal et on va taper la
commande :

Cela va créer un fichier de migration dans le dossier database/migration qui va permettre de


rajouter des informations dans notre base de données. Le fichier de migration va contenir
deux méthodes, une méthode up qui permet d'expliquer comment générer les table et les
champs et une méthode down qui permettra de revenir en arrière.
Ce système de migration permet d'interagir avec la création des tables avec une API PHP
plutôt que de devoir écrire du SQL. Cela s'adapte quel que soit le système de gestion de base
de données que vous utilisez.

Une fois que l'on est satisfait, on va pouvoir démarrer notre migration. Pour cela, encore une
fois, il faudra se rendre sur le terminal et on tapera la commande

php artisan migrate

Si on regarde ensuite le contenu de cette base de données, on va voir qu'il y a bien nos
différentes tables, et on a la table posts qui va contenir les champs que l'on a demandé.

Quelques commandes utiles:

Les models

Maintenant que notre table est créée on aimerait bien être capable de créer, lire et modifier
des enregistrements. C'est là qu'intervient un second composant, les "Model". Comme pour
les migrations, on peut les générer en ligne de commande, en faisant un php artisan
make:model, et on va appeler le modèle Post.
Ça va étendre de la classe Model qui provient du namespace de Eloquent. (c'est le nom de
l'ORM qui est utilisé par Laravel).

Lors de la génération de Model Eloquent appliquent des conventions, il faudra adapter votre
Model en conséquence.

Créer un article

Avec cette classe on a la possibilité d'initialiser un nouvel article en faisant

Ensuite, je peux renseigner des informations dessus. Cet objet va avoir des propriétés qui
correspondront au nom des champs dans notre base de données.

Une fois qu'on a rempli cet objet, on peut décider de le sauvegarder en base de données
grâce à la méthode save().

Cette méthode est disponible directement au niveau de tous les modèles, et elle permet
d'enregistrer les informations en base de données.

Récupérer des articles

Donc en plus de pouvoir créer des articles, on va pouvoir utiliser ce modèle Post pour
récupérer des informations. J'aimerais bien, par exemple, récupérer tous les articles depuis
ma base. Dans ce cas-là, on utilisera des méthodes statiques sur notre classe Post.

J'ai la possibilité aussi de spécifier les champs que je souhaite utiliser. Par exemple, je peux lui
dire que je suis intéressé que par l'ID et le titre de l'article.
Dans ce cas-là, il ne récupérera que ces informations-là. Si vous avez besoin de regarder à
quoi ressemble un objet, vous avez une petite méthode qui est plutôt pratique, qui
s'appelle dd, comme "die and debug", et qui vous permet de débuguer une variable.

Si on fait un dd de posts, on voit que ma méthode all(), ici, la renvoie à quelque chose de
type Collection, et à l'intérieur de cette collection, on a nos éléments dans une
propriété items. Chaque élément dans ma collection est un objet de type Post, qui est
initialisé avec les informations provenant de la base de données. Lorsque l'on utilise des
méthodes, il va faire ce qu'on appelle de l'hydratation, et créer des objets correspondant au
type demandé et les remplir avec les informations provenant de la base de données (On
rentrera un peu plus en profondeur sur ce qui se passe en interne plus tard).

En plus de la méthode all(), vous avez aussi d'autres méthodes intéressantes comme la
méthode find qui permet de récupérer un élément à partir de son ID.

Si je lui demande de récupérer un enregistrement qui n'existe pas il me renverra nul. Vous
avez aussi une autre méthode qui s'appelle findOrFail() qui, plutôt que de renvoyer nul,
renverra une Exception si la donnée n'a pas été trouvée.

Cette erreur sera automatiquement capturée par Laravel qui génèrera une page d'erreur 404.

Vous pouvez utiliser paginate() qui permet de renvoyer les enregistrements en les paginant.

En retour, cette fonction renverra un LengthAwarePaginator. C'est un objet qui peut être
utilisé à la fois dans les vues mais aussi dans la partie API pour générer des paginations.

Dans le cadre d'une API, si on retourne cet objet dans un controller, Laravel renverra un JSON
contenant les éléments, mais aussi les informations associé à la pagination.

Dans le cadre d'une application HTML on pourra boucler sur les articles plus tard et on
pourra aussi utiliser la méthode links() qui permettra de générer le code HTML de la
pagination.

Ce système de pagination sera aussi automatiquement influencé par le paramètre "?page"


dans l'URL qui permettra de naviguer de page en page.

Enfin, pour finir de parler de la récupération des informations, vous avez la possibilité
d'utiliser le système de Query Builder qui va permettre de concevoir des requêtes. Vous
pouvez concevoir des requêtes spécifiques en partant du modèle avec des méthodes qui
correspondront aux verbes utilisés au niveau de SQL.

Créer

Pour créer un nouvel enregistrement on peut utiliser la méthode create() en lui passant les
valeurs des différents champs.

Par contre cette méthode est sécurisée par défaut dans Laravel qui ne vous laissera
pas utiliser n'importe quel champs dans cette méthode. Il faut définir l'ensemble
des champs "remplissable" au travers d'une propriété fillable dans le model.

De la même manière, on a une propriété qui représente la notion inversée guarded, qui
permet de définir les champs qui ne sont pas remplissables.

Modifier

Si vous voulez modifier un article, la première approche qui est plutôt simple, c'est de
récupérer un enregistrement puis de modifier ses propriétés.

Il est aussi possible de modifier plusieurs enregistrements depuis une requête.

Supprimer

Enfin pour supprimer un enregistrement il suffit d'utiliser la méthode delete().


Mais comme pour l'update, on peut utiliser cette méthode à partir d'une requête pour
supprimer plusieurs enregistrements.

Les Contrôleurs

Dans ce nouveau chapitre où nous allons découvrir ensemble le principe des controllers dans
Laravel. Ce sont simplement des classes qui ont comme objectif de regrouper les fonctions
qui vont contenir la logique de notre application. Au niveau de Laravel, je peux créer un
contrôleur grâce à la commande php artisan make:controller.

Cette commande va créer un nouveau fichier dans le dossier Http/controllers avec à l'intérieur
une classe qui étend de la classe Controller de notre application. C'est à l'intérieur de cette
classe que l'on va définir nos méthodes

Ensuite on peut utiliser cette méthode dans notre routing.

Et il n'y a rien de plus à savoir pour le moment sur les controllers. Les méthodes fonctionnent
comme les méthodes anonymes que l'on avait vu au niveau du Routing (on peut injecter un
objet Request ou les paramètres de l'URL).

Les formulaires

Dans ce chapitre nous allons attaquer la partie formulaire de Laravel et on va voir comment
faire en sorte de pouvoir soumettre des informations pour créer ou modifier un article. Laravel
ne fournit pas forcément d'outils pour générer le code HTML des formulaire (si on le compare à
ce que propose Symfony) mais fournit différentes choses qui vont nous simplifier la tâche pour
la génération des vues.

Les méthodes utiles

@csrf

Par défaut Laravel offre une protection CSRF qui permet de se protéger contre les attaques
de type # Cross-site request forgery qui consiste à faire poster un formulaire depuis un site
extérieur.

Aussi, si vous créer un formulaire classique vous allez obtenir une erreur lors de sa
soumission et vous devrez créer un champs caché contenant une clef CSRF pour que votre
formulaire fonctionner. La directive @csrf permet de faire cela automatiquement.

@error

En cas d'erreur, l'utilisateur est automatiquement redirigé vers la page précédente avec les
erreurs de validations sauvegardées en session. Pour gérer l'affichage des erreurs Laravel
offre la directive @error qui permet d'afficher un message en cas d'erreur ou de conditionner
l'affichage d'une classe.

old()

En plus des erreurs, en cas de redirection on veut aussi pouvoir réafficher les dernières
informations rentrées par l'utilisateur dans le formulaire. La méthode old() va justement
permettre de récupérer ces informations depuis la session. On pourra aussi lui passer en
second paramètre une valeur par défaut à appliquer si il n'y a pas de valeur provenant de la
session.

old('firstname', $post->firstname);

@method

Enfin, une dernière directive vous permettra de créer un champs caché qui permettra de
simuler des méthodes qui ne sont pas supportées par les formulaires HTML de base.

@method("PUT")

Exemple

Voici un petit exemple de formulaire construit avec


Amélioration

La création de formulaire peut rapidement devenir très verbeux aussi il ne faudra pas hésiter
à se créer des morceaux de template réutilisable pour vous rendre plus efficace.

Installation et organisation
Dans ce chapitre, nous allons faire connaissance avec le gestionnaire de dépendances
Composer, présenter la création d’une application Laravel et expliquer comment le code est
organisé dans cette application.

Avertissement

Pour utiliser Laravel et suivre ce chapitre et l’ensemble de l’ouvrage, vous aurez besoin
d’un serveur équipé de PHP avec au minimum la version 5.5.9 et aussi de MySQL. Il existe
plusieurs applications « tout-en-un » faciles à installer : wampserver
(http://www.wampserver.com/), xampp (https:// www.apachefriends.org/fr/index.html),
easyphp (http://www.easyphp.org/)… Personnellement, j’utilise wamp, qui répond sans
problème à toutes mes attentes et permet de basculer entre les versions de PHP et de
MySQL en un simple clic. Une solution toute prête,
Homestead (https://laravel.com/docs/5.0/homestead), est facile à mettre en œuvre sous
Linux, mais beaucoup moins conviviale avec Windows. Pour ce dernier, il existe une autre
possibilité bien pensée : Laragon (https://laragon.org/).
Quelle que soit l’application que vous utilisez, vérifiez que vous avez la bonne version de
PHP (minimum 8.1). En outre, les extensions PDO, Tokenizer, OpenSSL et Mbstring de PHP
doivent être activées

I. Composer

La première étape serait d’installer le Composer dont laravel utilise. Cependant, qu’estce
qu’un composer? Et bien c’est assez simple, Composer trouve les fichiers PHP qu’on a besoin
dans un projet. Il va les chercher et les installer à la bonne place, pour nous. Comme Laravel
est un Framework PHP, il est très pratique de l’utiliser pour bien partir un projet.

Présentation
Je vous ai dit que Laravel utilise des composants d’autres sources. Plutôt que de les
incorporer directement, il utilise un gestionnaire de dépendances : Composer. D’ailleurs, les
composants de Laravel sont aussi traités comme des dépendances. De quoi s’agit-il ?
Imaginez que vous créez une application PHP et que vous utilisez des composants issus de
différentes sources : Carbon pour les dates, Redis pour les données… Une méthode
laborieuse consiste à aller chercher tout cela de façon manuelle, et vous allez être confrontés
à des difficultés : •

télécharger tous les composants dont vous avez besoin et les placer dans votre structure de
dossiers ;

traquer les éventuels conflits de nommage entre les bibliothèques ;

mettre à jour manuellement les bibliothèques quand c’est nécessaire ;


prévoir le code pour charger les classes à utiliser…

Tout cela est évidemment faisable, mais avouez qu’il serait bien agréable d’automatiser ces
procédures. C’est justement ce que fait un gestionnaire de dépendances !

II. Installation de Composer

On peut le télécharger sur le site getcomposer.org ou directement sur le site de laravel.com.


Ce Composer a une entente avec Laravel et va chercher tous les fichiers que Laravel utilise
pour bien fonctionner. En installant le Composer, on pourra installer beaucoup plus
facilement et rapidement le Framework Laravel, sans faire d’erreur. Une fois le fichier «
Composer-Setup.exe » est installé dans l’ordinateur, on peut maintenant installer Laravel.

III. Installation de laravel

Laravel utilise Composer comme gestionnaire de dépendances. Il vous faut donc commencer
par l’installer sur votre ordinateur. Selon votre système, la procédure est différente ; je vous
renvoie donc au site https://getcomposer.org/ pour obtenir tous les renseignements sur le
sujet.

Pour Windows, il suffit de télécharger un installeur (https://getcomposer.org/download/), qui


fait tout très proprement et renseigne aussi la variable d’environnement PATH, ce qui rend
Composer utilisable depuis n’importe quel emplacement. En revanche, l’installeur vous
demandera où se trouve php.exe et vous devrez répondre, car Composer est un fichier PHP
et a besoin d’être exécuté.

Pour les autres systèmes, en particulier Linux, le plus simple est d’utiliser curl. Il suffit de
suivre les instructions détaillées sur le site

Pour aller plus loin avec Composer, vous pouvez lire l’article suivant :
http://laravel.sillo. org/jouer-avec-composer/.

Fonctionnement

Pour comprendre le fonctionnement de Composer, il faut connaître le format JSON


(JavaScript Object Notation). Un fichier JSON a pour but de contenir des informations de type
étiquette-valeur. Regardez cet exemple élémentaire :

Maintenant, il faut savoir où installer le projet. Je vous conseille de travailler en localhost,


avant de travailler sur le serveur lui-même, pour simple efficacité. Ouvrez une fenêtre
Windows de où vous voulez mettre le dossier de projet et faites click-droit, si vous avez bien
installé le Composer, vous devriez voir dans la liste « use Composer here ». Vous le
sélectionnez et une fenêtre de commande va apparaître. Vous devez inscrire la ligne de
commande ci-dessous :
composer create-project laravel/laravel your-project-name

Composer : signifie qu’on utiliser le Composer


create-project : signifie qu’on crée un projet
laravel/laravel : va chercher les fichiers à installer pour le Framework Laravel
your-project-name : on met le nom qu’on veut donner à notre projet

Quand vous avez fini, vous pesez sur la touche « enter » et cela va installer systématiquement
Laravel au complet.

Une fois l’installation complété, testez si ça a bel et bien fonctionné. Pour ce faire, ouvrer
votre fenêtre de navigation, google chrome ou firefox, et entrer votre lien pour le site soit :

localhost/nom-de-votre-dossier/public

Utilisation de Laravel

I. Structure des dossiers


Il est important de d’abord analyser la structure des dossiers pour savoir comment la
hiérarchie fonctionne. Voici les dossiers important à retenir :

Il y a d’autres dossiers mais moins important quand on commence à utiliser Laravel.


Le dossier app contient tous les éléments nécessaires à la programmation « back-end » du
site. Le dossier public, lui, contient les médias et les autres langages de
programmation, soit le CSS, le JS et il y a même un dossier less pour ceux qui veulent
s’aventurer avec ce langage, ce que je conseil très fortement, less est très facile à utiliser et
simplifie beaucoup l’apparence du css! Il y a également un dossier pour
boostrap si jamais on veut l’utiliser pour le site internet.
On peut voir ici que Laravel utilise les dernières nouveautés dans la programmation pour
apporter la meilleure expérience aux utilisateurs de ce Framework.

II. Relier la base de données

Maintenant, il faut relier la base de données au projet. Dans le dossier config, il existe le
fichier database.php. En l’ouvrant, on peut voir plusieurs array, dont un qui est associé à
mysql.

Pour 'database' => il faut mettre ensuite le nom de la base de données, soit ’GestClient’ dans
mon cas.
Pour 'username' => notre nom d’utilisateur de la connexion à phpmyadmin, qui est ‘root’
pour moi. Pour 'password' => le mot de passe.
Et pour le charset, il est par défaut en utf8.

Comme il y a plusieurs type de connexion à une base de données disponible, il ne faut pas
oublier de mettre par défaut le type de connexion que l’on va utiliser, soit ‘mysql’ comme
cidessous, toujours dans le même fichier :

III. Créer les models


Pour chaque table de notre base de données que l’on veut utiliser pour notre site, il faut
créer un modèle pour chacun. Dans le dossier app/models, il y a User.php qui est un fichier
de base.

Dans mon GestClient, j’ai 3 tables. Alors j’ai créé un fichier php à partir de User.php comme
suit :

Vous aimerez peut-être aussi