Skip to content

Votre première application

Prérequis

  • Connaissances de base en PHP

Il s'agit d'un tutoriel interactif pour vous aider à démarrer, de l'installation à la création de votre première application Leaf 3. Ce tutoriel nécessite des connaissances de base en PHP et, en option, des connaissances sur les APIs.

Pour démarrer

Leaf CLI

Nous vous recommandons d'utiliser [Leaf CLI] (https://cli.leafphp.dev) pour créer et gérer vos projets Leaf.

Pour commencer, nous devons générer une application Leaf. Nous pouvons le faire simplement via Leaf CLI :

leaf create <your-project-name> --basic --v3

Ou avec Composer :

composer require leafs/leaf

Après cela, vous devrez créer un fichier index.php. Ceci est déjà fait pour vous si vous avez utilisé Leaf CLI.

Le démarreur de votre application

Maintenant que Leaf est installé, vous aurez besoin d'un fichier qui servira de racine à votre projet. Leaf utilise un seul fichier racine, vers lequel toutes les routes sont envoyées. Leaf prend alors la route et appelle le gestionnaire correspondant. Vous pouvez en lire plus dans la doc sur le routage.

Votre fichier de démarrage importera Leaf et contiendra vos routes.

<?php

require __DIR__ . '/vendor/autoload.php';

Ce qui précède importe en quelque sorte nos dépendances installées et nous permet de les utiliser sans les require ou les include une par une.

A partir d'ici, nous pouvons commencer à construire notre application.

Définissons une route pour essayer.



 
 
 




$app = new Leaf\App();

$app->get('/', function () {
  echo 'Un petit message';
});

// n'oubliez pas d'appeler la méthode `run`
$app->run();

Normalement, nous devrions initialiser Leaf, cependant, avec l'arrivée du mode Fonctionnel, nous n'avons pas besoin de le faire. Nous pouvons passer directement à la construction de notre application.

Définissons une route pour essayer.

 
 
 




app()->get('/', function () {
  echo 'Un petit message';
});

// n'oubliez pas d'appeler la méthode `run`
app()->run();

Définir une route est aussi simple que cela avec Leaf. Ici, nous avons juste défini la route GET /. Nous pouvons maintenant exécuter notre application avec leaf serve si vous utilisez Leaf CLI, ou bien avec le serveur intégré php -S localhost:[PORT].

Notre application

Maintenant que nous avons terminé la configuration de notre "Hello world", nous pouvons commencer notre application. Nous allons construire une application simple de prise de notes qui nous permettra de créer et de récupérer des notes depuis une base de données.

Modules

Les modules sont des morceaux de fonctionnalités de Leaf qui sont proposés comme des plugins installables. Ils ont été créés dans le but d'empêcher Leaf de s'encrasser comme d'autres frameworks. Cela signifie que vous pouvez avoir seulement ce dont vous avez besoin dans votre application, et toujours étendre la puissance de Leaf en fonction de ce que vous voulez faire.

Comme vous le verrez, les modules sont installés à l'aide de Leaf CLI ou de Composer. Pour cette application, nous allons utiliser le module db pour accéder à notre base de données.

Récupérer nos notes

Création de notre route

Pour commencer cette étape, nous devons créer une route en GET qui renverra toutes les notes de notre base de données. Comme nous savons déjà comment créer des routes comme celle de l'exemple ci-dessus, cette étape est assez simple.

$app->get('/notes', function () {
  // récupère toutes les notes de la base
  // renvoie les notes en JSON
  echo 'Toutes les notes';
});
app()->get('/notes', function () {
  // récupère toutes les notes de la base
  // renvoie les notes en JSON
  echo 'Toutes les notes';
});

Récupération des notes

Comme mentionné ci-dessus, nous allons utiliser le module db pour accéder à notre base de données. Leaf DB a rendu les opérations de base de données vraiment simples et accessibles à tous. Vous n'avez même pas besoin de connaissances en SQL pour l'utiliser.

Installation du module db

Pour installer le module db, nous allons utiliser Leaf CLI

leaf install db

Vous pouvez aussi le faire via Composer :

composer require leafs/db

Connexion à notre base de données

Une fois le module installé, nous pouvons retourner dans notre application et nous connecter à notre base de données.

$db = new Leaf\Db;
$db->connect('127.0.0.1', 'dbname', 'username', 'password');
db()->connect('127.0.0.1', 'dbname', 'username', 'password');

Nous pouvons placer ce code avant nos routes, afin de pouvoir utiliser la variable $db partout.

Utilisation du module db

De retour dans notre route, nous pouvons passer la variable `$db` et commencer à l'utiliser. Vous pouvez consulter la [doc du module db](/modules/db/) pour plus d'informations.

Ce que nous voulons faire ici est de récupérer toutes les données de notre table notes, nous pouvons le faire simplement en utilisant select. C'est une méthode fournie par leaf db qui nous permet d'exécuter la commande SQL SELECT.

$app = new Leaf\App;
$db = new Leaf\Db;

$db->connect('127.0.0.1', 'dbname', 'username', 'password');

// on passe la variable $db en callback avec `use`
$app->get('/notes', function () use($db) {
  
  // on récupère toutes les notes de la base
  $notes = $db->select('notes')->all();

  // on renvoie les notes sous forme de JSON
  echo 'Toutes les notes';
});
db()->connect('127.0.0.1', 'dbname', 'username', 'password');

app()->get('/notes', function () {

  // on récupère toutes les notes de la base
  $notes = db()->select('notes')->all();

  // on renvoie les notes sous forme de JSON
  echo 'Toutes les notes';
});

Maintenant que nous avons été en mesure de récupérer nos données dans la base de données, voyons comment nous pouvons afficher ces données.

L'objet Response

L'objet Response est une librairie permettant de gérer la manière dont les données sortent de votre application. Son interface est simple et facile d'utilisation, et avec le mode Fonctionnel, il peut être utilisé n'importe où dans votre application, sans avoir à l'initialiser.

Dans les lignes ci-dessus, nous avons récupéré nos données depuis la base de données. Maintenant, tout ce qui nous reste à faire est de renvoyer ces données en JSON. Nous pouvons le faire simplement en appelant la méthode json sur l'objet Response.

$app->get('/notes', function () use($app, $db) {
  $notes = $db->select('notes')->all();

  $app->response()->json([
    'status' => 'success',
    'data' => $notes,
  ]);
});
app()->get('/notes', function () {
  $notes = db()->select('notes')->all();

  response()->json([
    'status' => 'success',
    'data' => $notes,
  ]);
});

Ce qui produira le retour d'un JSON :

{
  "status": "success",
  "data": [...]
}

Sauvegarder nos notes

Nous devons créer une autre route pour gérer l'ajout de nouvelles notes dans la base de données. Dans ce cas, nous allons créer une route accessible en POST, ce qui signifie que vous devrez créer une requête POST pour y accéder. Cela peut être fait en utilisant un client HTTP quelconque.

Cette nouvelle route prendra certaines données de notre application, puis sélectionnera uniquement ce qui doit être sauvegardé dans la base de données, et enfin renverra un message.

$app->post('/notes/new', function () use($db) {
  // obtenir les données à partir de la requête
  // sauvegarder les données dans la base
  // renvoyer un message de succès
});
app()->post('/notes/new', function () {
  // obtenir les données à partir de la requête
  // sauvegarder les données dans la base
  // renvoyer un message de succès
});

L'objet Request

Comme nous l'avons vu avec l'objet Response, Leaf fournit également un objet Request qui nous permet d'obtenir rapidement et en toute sécurité les données qui entrent dans notre application.

$item = $app->request()->get('item');
$item = request()->get('item');

Cette ligne va récupérer des données avec la clé item passée dans l'application depuis un formulaire, une url ou toute autre donnée et les sauvegarder dans la variable $item. Dans ce cas, notre application va accepter title, body et date que nous allons sauvegarder dans la base de données.

Pour ce faire, nous pouvons les récupérer un par un comme nous l'avons fait ci-dessus, mais Leaf propose une méthode plus simple.

$data = $app->request()->get(['title', 'body', 'date']);
$data = request()->get(['title', 'body', 'date']);

Ainsi, toutes les autres données transmises dans notre application seront ignorées, mais resteront disponibles pour être utilisées.

Sauvegarde des données dans la base

Pour sauvegarder les données dans la base de données, nous allons utiliser le module db comme nous l'avons fait ci-dessus. Cette fois, nous utiliserons la méthode insert à la place.

$db->insert('notes')->params($data)->execute();
db()->insert('notes')->params($data)->execute();

execute est utilisé pour les commandes qui ne retournent aucune valeur comme insert et update.

Si nous récapitulons, nous avons :

$app->post('/notes/new', function () use($app, $db) {
  // obtenir les données à partir de la requête
  $data = $app->request()->get(['title', 'body', 'date']);

  // sauvegarder les données dans la base
  $db->insert('notes')->params($data)->execute();

  // renvoyer un message de succès
  $app->response()->json([
    'status' => 'success',
    'message' => 'Notes saved'
  ]);
});
app()->post('/notes/new', function () {
  // obtenir les données à partir de la requête
  $data = request()->get(['title', 'body', 'date']);

  // sauvegarder les données dans la base
  db()->insert('notes')->params($data)->execute();

  // renvoyer un message de succès
  response()->json([
    'status' => 'success',
    'message' => 'Notes saved'
  ]);
});

Mise en place globale

<?php

require __DIR__ . '/vendor/autoload.php';

$app = new Leaf\App;
$db = new Leaf\Db;

$db->connect('127.0.0.1', 'dbname', 'username', 'password');

$app->get('/notes', function () use($app, $db) {
  $notes = $db->select('notes')->all();

  $app->response()->json([
    'status' => 'success',
    'data' => $notes,
  ]);
});

$app->post('/notes/new', function () use($app, $db) {
  $data = $app->request()->get(['title', 'body', 'date']);

  $db->insert('notes')->params($data)->execute();

  $app->response()->json([
    'status' => 'success',
    'message' => 'Notes saved'
  ]);
});

$app->run();
<?php

require __DIR__ . '/vendor/autoload.php';

db()->connect('127.0.0.1', 'dbname', 'username', 'password');

app()->get('/notes', function () {
  $notes = db()->select('notes')->all();

  response()->json([
    'status' => 'success',
    'data' => $notes,
  ]);
});

app()->post('/notes/new', function () {
  $data = request()->get(['title', 'body', 'date']);

  db()->insert('notes')->params($data)->execute();

  response()->json([
    'status' => 'success',
    'message' => 'Notes saved'
  ]);
});

app()->run();

Comme vous pouvez le constater, nous avons créé une application de prise de notes en moins de 30 lignes de code avec Leaf !

Votre première application has loaded