Tp 3 php functions utils blogpoo
Thème :
Junior
1 vues ·6/10 leçons

05 - Refactoring des Contrôleurs

Après avoir créé nos fonctions utilitaires, l’étape finale consiste à nettoyer nos contrôleurs. L’objectif est de supprimer tout le code SQL “sale” des fichiers PHP à la racine pour ne laisser que de la logique métier simple.


Exemple : Avant vs Après (index.php)

Avant (Code Procédural direct)

// Requête comptant le total d'articles
$totalQuery = $pdo->query('SELECT COUNT(*) FROM articles');
$totalItems = (int)$totalQuery->fetchColumn();

// ... logique de calcul offset ...

$sql = '
    SELECT
        articles.*,
        (SELECT COUNT(*) FROM comments WHERE comments.article_id = articles.id) AS comment_count
    FROM articles
    ORDER BY articles.created_at DESC
    LIMIT :limit OFFSET :offset
';
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':limit', $itemsPerPage, PDO::PARAM_INT);
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->execute();
$articles = $stmt->fetchAll();

Après (Utilisation des fonctions)

// Requête comptant le total d'articles
$totalItems = countArticles();

// ... logique de calcul offset ...

$articles = findAllArticles($itemsPerPage, $offset);

Explications Détaillées

1. Pourquoi est-ce mieux ?

  • Lisibilité : Le contrôleur ne fait plus que 3 lignes au lieu de 15. On comprend tout de suite ce que fait le code (countArticles, findAllArticles).
  • DRY (Don’t Repeat Yourself) : Si nous décidons demain de changer le nom de la table articles en posts, nous n’aurons qu’à modifier un seul fichier (app/functions/article.php) au lieu de modifier 10 contrôleurs différents.
  • Maintenance : Si une erreur SQL survient, nous savons exactement où elle se trouve.

2. Centralisation des vérifications (helpers.php)

Nous avons également créé des fonctions pour simplifier la sécurité au début de chaque fichier :

// Au lieu de :
if (!isset($_SESSION['auth']) || $_SESSION['auth']['role'] !== 'ADMIN') {
    header('Location: index.php');
    exit();
}

// On écrit simplement :
checkAdmin();

3. Conclusion de la Phase 3

Ce refactoring marque la fin de la programmation “spaghetti” où le SQL était mélangé au HTML et à la logique. Nous avons maintenant une structure modulaire :

  1. Les Fonctions (app/functions/) gèrent les données.
  2. Les Contrôleurs (racine) gèrent la logique et les variables.
  3. Les Vues (resources/views/) gèrent l’affichage.

C’est la base indispensable pour passer sereinement à la Programmation Orientée Objet (POO) !

Prêt à passer à la suite ?

Vous avez terminé cette leçon sur 05 - Refactoring des Contrôleurs. Continuez votre apprentissage avec la prochaine leçon ou explorez d'autres formations.