diff --git a/TP4/ex1/controller/ControleurAuteur.php b/TP4/ex1/controller/ControleurAuteur.php
index e787d51151446ee34ff8a9e665f6eb31b9153205..d0b28fe2515acd84b64b2e80480bb8992a4d1cc1 100644
--- a/TP4/ex1/controller/ControleurAuteur.php
+++ b/TP4/ex1/controller/ControleurAuteur.php
@@ -3,23 +3,10 @@ require_once("models/Auteur.php");
 
 class ControleurAuteur
 {
-
     public static function lireAuteurs()
     {
-        $titre = "les auteurs";
-        $tableau = Auteur::getAllAuteurs();
-        $tableauAffichage = array();
-        foreach ($tableau as $auteur) {
-            $numAuteur = $auteur->getNumAuteur();
-            $nom = $auteur->getNom();
-            $prenom = $auteur->getPrenom();
-            $lienDetails = "<a class='bouton' href=\"index.php?controller=controleurAuteur&action=lireAuteur&numAuteur=$numAuteur\"> détails </a>";
-            $tableauAffichage[] = "<div class='ligne'><div>Auteur $prenom $nom</div><div> $lienDetails</div></div>";
-        }
-        include("resources/views/debut.php");
-        include("resources/views/menu.html");
-        include("resources/views/lesAuteurs.php");
-        include("resources/views/fin.html");
+        $auteurs = Auteur::getAllAuteurs();
+        return view('auteurs.liste-auteurs', ['auteurs' => $auteurs]);
     }
 
     public static function lireAuteur()
diff --git a/TP4/ex1/helpers/views.php b/TP4/ex1/helpers/views.php
index f5ecd7ce23c37ffd99e86d8b6ee8f2df329a1289..b22aefb193d2e419aa713d3c047dbd0ba159e7bf 100644
--- a/TP4/ex1/helpers/views.php
+++ b/TP4/ex1/helpers/views.php
@@ -1,5 +1,5 @@
 <?php
-function view(string $viewName, array $args): bool
+function view(string $viewName, array $args = []): bool
 {
     $viewPathParts = explode(".", $viewName);
     $viewPath = "";
diff --git a/TP4/ex1/models/Auteur.php b/TP4/ex1/models/Auteur.php
index 87e37b311bb6e53c09c7cbe2e96569dba51b9229..90b33d2cf362ff025b2b7976c82f1951643664a8 100644
--- a/TP4/ex1/models/Auteur.php
+++ b/TP4/ex1/models/Auteur.php
@@ -1,71 +1,113 @@
 <?php
-class Auteur {
-
-// attributs
-	private $numAuteur;
-	private $nom;
-	private $prenom;
-	private $anneeNaissance;
-
-	// getter
-	public function getNumAuteur() {return $this->numAuteur;}
-	public function getNom() {return $this->nom;}
-	public function getPrenom() {return $this->prenom;}
-	public function getAnneeNaissance() {return $this->anneeNaissance;}
-
-	// setter
-	public function setNumAuteur($nu) {$this->numAuteur = $nu;}
-	public function setNom($n) {$this->nom = $n;}
-	public function setPrenom($p) {$this->prenom = $p;}
-	public function setAnneeNaissance($a) {$this->anneeNaissance = $a;}
-
-	// un constructeur
-	public function __construct($nu = NULL, $n = NULL, $p = NULL, $a = NULL)  {
-		if (!is_null($nu)) {
-			$this->numAuteur = $nu;
-			$this->nom = $n;
-			$this->prenom = $p;
-			$this->anneeNaissance = $a;
-		}
-	}
-
-	// une methode d'affichage.
-	public function afficher() {
-		echo "<p>auteur $this->prenom $this->nom, né(e) en $this->anneeNaissance </p>";
-	}
-
-	// méthode static qui retourne les auteurs en un tableau d'objets
-	public static function getAllAuteurs() {
-		// écriture de la requête
-		$requete = "SELECT * FROM Auteur;";
-    // envoi de la requête et stockage de la réponse
-		$resultat = Database::pdo()->query($requete);
-    // traitement de la réponse
-    $resultat->setFetchmode(PDO::FETCH_CLASS,'Auteur');
-    $tableau = $resultat->fetchAll();
-		return $tableau;
-	}
-
-	// méthode static qui retourne un auteur identifié par son numAuteur
-	public static function getAuteurByNum($numAuteur) {
-		// écriture de la requête
-		$requetePreparee = "SELECT * FROM Auteur WHERE numAuteur = :num_tag;";
-		$req_prep = Database::pdo()->prepare($requetePreparee);
-		// le tableau des valeurs
-		$valeurs = array("num_tag" => $numAuteur);
-		try {
-			// envoi de la requête
-			$req_prep->execute($valeurs);
-			// traitement de la réponse
-	    $req_prep->setFetchmode(PDO::FETCH_CLASS,'Auteur');
-			// récupération de l'auteur
-			$a = $req_prep->fetch();
-			// retour
-			return $a;
-		} catch(PDEException $e) {
-			echo $e->getMessage();
-		}
-	}
+
+class Auteur
+{
+	// attributs
+    private int $numAuteur;
+    private string $nom;
+    private string $prenom;
+    private ?int $anneeNaissance;
+
+    // getter
+
+    public function __construct($nu = NULL, $n = NULL, $p = NULL, $a = NULL)
+    {
+        if (!is_null($nu)) {
+            $this->numAuteur = $nu;
+            $this->nom = $n;
+            $this->prenom = $p;
+            $this->anneeNaissance = $a;
+        }
+    }
+
+    public static function getAllAuteurs()
+    {
+        // écriture de la requête
+        $requete = "SELECT * FROM Auteur;";
+        // envoi de la requête et stockage de la réponse
+        $resultat = Database::pdo()->query($requete);
+        // traitement de la réponse
+        $resultat->setFetchmode(PDO::FETCH_CLASS, 'Auteur');
+        $tableau = $resultat->fetchAll();
+        return $tableau;
+    }
+
+    public static function getAuteurByNum($numAuteur)
+    {
+        // écriture de la requête
+        $requetePreparee = "SELECT * FROM Auteur WHERE numAuteur = :num_tag;";
+        $req_prep = Database::pdo()->prepare($requetePreparee);
+        // le tableau des valeurs
+        $valeurs = array("num_tag" => $numAuteur);
+        try {
+            // envoi de la requête
+            $req_prep->execute($valeurs);
+            // traitement de la réponse
+            $req_prep->setFetchmode(PDO::FETCH_CLASS, 'Auteur');
+            // récupération de l'auteur
+            $a = $req_prep->fetch();
+            // retour
+            return $a;
+        } catch (PDEException $e) {
+            echo $e->getMessage();
+        }
+    }
+
+    public function getNumAuteur()
+    {
+        return $this->numAuteur;
+    }
+
+    // setter
+
+    public function setNumAuteur($nu)
+    {
+        $this->numAuteur = $nu;
+    }
+
+    public function getNom()
+    {
+        return $this->nom;
+    }
+
+    public function setNom($n)
+    {
+        $this->nom = $n;
+    }
+
+    public function getPrenom()
+    {
+        return $this->prenom;
+    }
+
+    // un constructeur
+
+    public function setPrenom($p)
+    {
+        $this->prenom = $p;
+    }
+
+    // une methode d'affichage.
+
+    public function getAnneeNaissance()
+    {
+        return $this->anneeNaissance;
+    }
+
+    // méthode static qui retourne les auteurs en un tableau d'objets
+
+    public function setAnneeNaissance($a)
+    {
+        $this->anneeNaissance = $a;
+    }
+
+    // méthode static qui retourne un auteur identifié par son numAuteur
+
+    public function afficher()
+    {
+        echo "<p>auteur $this->prenom $this->nom, né(e) en $this->anneeNaissance </p>";
+    }
 
 }
+
 ?>
diff --git a/TP4/ex1/resources/views/auteurs/liste-auteurs.php b/TP4/ex1/resources/views/auteurs/liste-auteurs.php
new file mode 100644
index 0000000000000000000000000000000000000000..a756b37c9bbfeca58db03a06f88261b47d3af77b
--- /dev/null
+++ b/TP4/ex1/resources/views/auteurs/liste-auteurs.php
@@ -0,0 +1,29 @@
+<html lang="fr">
+<head>
+    <meta charset="utf-8">
+    <title>Liste des auteurs</title>
+    <?=view('layouts.head')?>
+</head>
+<body class="">
+    <div class="container">
+        <h1>Liste de tous les auteurs</h1>
+        <p>Voici la liste de tous les auteurs</p>
+        <div class="d-flex flex-wrap justify-content-between">
+            <?php foreach ($auteurs as $auteur) { ?>
+                <div class="card mb-2" style="width: 18rem;">
+                    <div class="card-body">
+                        <h5 class="card-title"><?=$auteur->getPrenom()?> <?=$auteur->getNom()?></h5>
+                        <p class="card-text">ID: <?=$auteur->getNumAuteur()?><br>
+                        Date de naissance: <?=$auteur->getAnneeNaissance()?></p>
+                        <a class="btn btn-primary"
+                           href="index.php?controller=controleurAuteur&action=lireAuteur&numAuteur=<?=$auteur->getNumAuteur()?>">
+                            Lire les détails
+                        </a>
+                    </div>
+                </div>
+            <?php } ?>
+        </div>
+    </div>
+    <?=view('layouts.footer')?>
+</body>
+</html>
\ No newline at end of file
diff --git a/TP4/ex1/resources/views/layouts/footer.php b/TP4/ex1/resources/views/layouts/footer.php
new file mode 100644
index 0000000000000000000000000000000000000000..102324d89fcfc0b9adb4de01b1b1271308e64c0e
--- /dev/null
+++ b/TP4/ex1/resources/views/layouts/footer.php
@@ -0,0 +1,2 @@
+<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
+<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-Fy6S3B9q64WdZWQUiU+q4/2Lc9npb8tCaSX9FK7E8HnRr0Jz8D6OP9dO5Vg3Q9ct" crossorigin="anonymous"></script>
\ No newline at end of file
diff --git a/TP4/ex1/resources/views/layouts/head.php b/TP4/ex1/resources/views/layouts/head.php
new file mode 100644
index 0000000000000000000000000000000000000000..326e865e25d4567e839f864c6f76718653f6d58a
--- /dev/null
+++ b/TP4/ex1/resources/views/layouts/head.php
@@ -0,0 +1 @@
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">
\ No newline at end of file