Académique Documents
Professionnel Documents
Culture Documents
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
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
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.
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é.
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.
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.
Écosystème Développeur :
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
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
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.
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.
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 :
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
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,
Un système de cache ;
Un système d’événements ;
Un système d’autorisations ;
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 :
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 ;
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.
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.
- 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é
Laravel est un framework novateur, complet, qui utilise les possibilités les plus récentes de
PHP et qui est impeccablement codé et organisé.
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.
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.
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 () {
});
Route::get('/about', function () {
});
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;
});
});
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.
use Illuminate\Support\Facades\Route;
});
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;
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 () {
})->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 () {
});
Route::get('/profile', function () {
});
});
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 :
use Illuminate\Support\Facades\Route;
Route::prefix('admin')->group(function () {
Route::get('/dashboard', function () {
});
Route::get('/users', function () {
});
});
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 () {
Route::get('/users', function () {
})->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.
use App\Http\Controllers\Admin\DashboardController;
use App\Http\Controllers\Admin\UsersController;
use Illuminate\Support\Facades\Route;
Route::prefix('admin')->group(function () {
});
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.
use Illuminate\Support\Facades\Route;
Route::prefix('user/{user_id}')->group(function () {
})->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 () {
});
Route::get('/profile', function () {
});
});
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 :
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.
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 :
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
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é.
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
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.
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.
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.
Supprimer
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
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.
@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
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 ;
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 !
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 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
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
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 :
Dans mon GestClient, j’ai 3 tables. Alors j’ai créé un fichier php à partir de User.php comme
suit :