• 15 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 15/11/2019

Soigner la cosmétique

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Notre code est maintenant découpé en 3 fichiers :

  • Un pour le traitement PHP : il récupère les données de la base. On l'appelle le modèle.

  • Un pour l'affichage : il affiche les informations dans une page HTML. On l'appelle la vue.

  • Un pour faire le lien entre les deux : on l'appelle le contrôleur.

Cette structure est bien, mais nous allons faire quelques améliorations cosmétiques. Ce ne sont peut-être que des détails pour vous, mais ça fera une vraie différence à la fin.

Voici ce que nous allons améliorer :

  • L'anglais

  • La balise de fermeture PHP

  • L'utilisation de short open tags

  • L'indentation

Je vous présente le code amélioré. Nous le commenterons un peu ensuite.

Le code amélioré

index.php

<?php
require('model.php');

$posts = getPosts();

require('indexView.php');

Le fichier index.php appelle nos nouveaux noms de fichier, que j'ai traduits en anglais. Les variables et les noms des fonctions sont aussi en anglais.

Vous constaterez que j'ai enlevé la balise de fermeture ?> à la fin du fichier. Plus fou encore, je vais vous dire que c'est... une amélioration.

Les développeurs professionnels enlèvent en effet la balise de fermeture PHP dans les pages qui ne contiennent que du PHP. Sans rentrer dans les détails, ça permet d'éviter que ces fichiers n'envoient par erreur du code HTML sous forme d'espaces blancs alors qu'ils ne devraient pas. Faites-moi confiance et retirez ce ?> si votre fichier ne contient que du PHP. Et si vous ne me faites pas confiance, lisez la recommandation officielle appelée PSR-2 qui dit :

The closing ?> tag MUST be omitted from files containing only PHP.

Rassurez-vous, PHP sait que la balise se ferme à la fin du fichier (il n'y a pas le choix de toute façon !).

model.php

<?php
function getPosts()
{
    try
    {
        $db = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', 'root');
    }
    catch(Exception $e)
    {
        die('Erreur : '.$e->getMessage());
    }

    $req = $db->query('SELECT id, title, content, DATE_FORMAT(creation_date, \'%d/%m/%Y à %Hh%imin%ss\') AS creation_date_fr FROM posts ORDER BY creation_date DESC LIMIT 0, 5');

    return $req;
}

Dans le modèle, les requêtes se font depuis une base de données en anglais (j'ai renommé les noms des champs en base).

indexView.php

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Mon blog</title>
        <link href="style.css" rel="stylesheet" /> 
    </head>
        
    <body>
        <h1>Mon super blog !</h1>
        <p>Derniers billets du blog :</p>
 
        
        <?php
        while ($data = $posts->fetch())
        {
        ?>
            <div class="news">
                <h3>
                    <?= htmlspecialchars($data['title']) ?>
                    <em>le <?= $data['creation_date_fr'] ?></em>
                </h3>
                
                <p>
                    <?= nl2br(htmlspecialchars($data['content'])) ?>
                    <br />
                    <em><a href="#">Commentaires</a></em>
                </p>
            </div>
        <?php
        }
        $posts->closeCursor();
        ?>
    </body>
</html>

L'affichage (aussi appelé "vue" ou "view" en anglais) contient uniquement du code en anglais ( $donnees est devenu$data par exemple).

Le code est un peu mieux indenté : on décale toujours d'un cran vers la droite le code à l'intérieur d'une balise. Le décalage se fait toujours en ajoutant 4 espaces à chaque fois qu'on veut décaler.

Enfin, ce n'est pas obligatoire mais j'ai utilisé les "short open tags" en PHP pour faciliter la lisibilité du code. Ainsi, par exemple :

<?php echo htmlspecialchars($data['title']); ?>

... est devenu :

<?= htmlspecialchars($data['title']) ?>

Cela permet d'éviter d'avoir à écrire echo quand on souhaite juste afficher une variable. Le but est d'être plus lisible dans la vue en enlevant le maximum de code PHP là-dedans (même si on ne peut pas tout enlever).

La base de données

Pour avoir du code uniquement en anglais, j'ai dû renommer ma base de données en anglais. Pour l'instant, nous avons une seule table "posts" qui doit représenter les posts de blog.

La structure de notre base de données : une table... en anglais !
La structure de notre base de données : une table... en anglais !

Il y a 4 champs, nommés en anglais :

  • id (integer)

  • title (varchar)

  • content (text)

  • creation_date (datetime)

Cette table vous prendra 30 secondes à créer maximum. 😉
Sachez que vous pouvez aussi renommer votre table et ses champs depuis phpMyAdmin, pour ne pas avoir à en créer une nouvelle.

Essayez !

https://www.codevolve.com/api/v1/publishable_key/2A9CAA3419124E3E8C3F5AFCE5306292?content_id=943a1da7-89a0-4679-b37c-11fedcd56af2

Exemple de certificat de réussite
Exemple de certificat de réussite