diff --git a/TP4/ex1/app/models/View.php b/TP4/ex1/app/models/View.php index 2459f6103e26a37b7acbb09c1334c84ba5df6561..4bcc3b9d9f2b4f313ee5cbdea9163b4bb8dd9a8a 100644 --- a/TP4/ex1/app/models/View.php +++ b/TP4/ex1/app/models/View.php @@ -1,7 +1,16 @@ <?php +/** + * Tentative de créer un système de template. + */ class View { + /** + * S'occupe d'ouvrir la template. + * @param string $viewName + * @param array $args + * @return string + */ public static function load(string $viewName, array $args = []): string { $viewPathParts = explode(".", $viewName); @@ -11,29 +20,40 @@ class View } $viewPath = "resources/views" . $viewPath . ".php"; if(file_exists($viewPath)){ - echo self::parse($viewPath, $args); + echo self::render(self::parse($viewPath), $args); return ""; }else{ return "La vue " . $viewName . " est introuvable."; } } - public static function parse(string $viewPath, array $args = []): string + /** + * S'occuper de remplir la template + * @param string $viewPath + * @param array $args + * @return string + */ + public static function parse(string $viewPath): string { - extract($args); $viewContent = file_get_contents($viewPath); - preg_match_all("/\{\{(.*?)\}\}/", $viewContent, $stringConcatMatches); + // On va rechercher toutes les concaténations {{ $var }} + $viewContent = preg_replace("/\{\{(.*?)\}\}/", "<?=$1?>", $viewContent); - foreach ($stringConcatMatches as $match){ - if(!empty($match) && !str_contains($match[0], "{{")){ - ob_start(); - eval("echo " . $match[0] . ";"); - $result = ob_get_clean(); - $viewContent = preg_replace("/\{\{" . preg_quote($match[0]) . "\}\}/", $result, $viewContent); - } - } + // On va rechercher tous les @foreach($var1 as $var2) @endforeach + $viewContent = preg_replace("/@foreach[ ]{0,1}\((.*?) as (.*?)\)/", + "<?php foreach($1 as $2) { ?>", $viewContent); + $viewContent = preg_replace("/@endforeach/", "<?php } ?>", $viewContent); + return $viewContent; + } + public static function render(string $viewCode, array $args = []): string + { + extract($args); + // On ouvre le buffer pour enregistrer le résultat de l'echo. + ob_start(); + eval("?>" . $viewCode . "<?php"); + return ob_get_clean(); } } \ No newline at end of file diff --git a/TP4/ex1/resources/views/adherents/les-adherents.php b/TP4/ex1/resources/views/adherents/les-adherents.php index 01e941b7e5d1b23ca42554a897678d08963af671..202482dd5ee793cb312729b139523a3b153dd8b2 100644 --- a/TP4/ex1/resources/views/adherents/les-adherents.php +++ b/TP4/ex1/resources/views/adherents/les-adherents.php @@ -5,25 +5,25 @@ <?=view('components.head')?> </head> <body class=""> -<div class="container"> - <h1>Liste de tous les adhérents</h1> - <p>Voici la liste de tous les adhérents</p> - <div class="d-flex flex-wrap justify-content-between"> - <?php foreach ($adherents as $adherent) { ?> - <div class="card mb-2" style="width: 18rem;"> - <div class="card-body"> - <h5 class="card-title"><?=$adherent->getPrenomAdherent()?> <?=$adherent->getNomAdherent()?></h5> - <p class="card-text">ID: <?=$adherent->getLogin()?><br> - Date de naissance: <?=$adherent->getDateAdhesion()->format("Y-m-d")?></p> - <a class="btn btn-primary" - href="index.php?action=lireAdherent&login=<?=$adherent->getLogin()?>"> - Lire les détails - </a> + <div class="container"> + <h1>Liste de tous les adhérents</h1> + <p>Voici la liste de tous les adhérents</p> + <div class="d-flex flex-wrap justify-content-between"> + @foreach($adherents as $adherent) + <div class="card mb-2" style="width: 18rem;"> + <div class="card-body"> + <h5 class="card-title">{{ $adherent->getPrenomAdherent() }} {{ $adherent->getNomAdherent() }}</h5> + <p class="card-text">ID: {{ $adherent->getLogin() }}<br> + Date de naissance: {{ $adherent->getDateAdhesion()->format("Y-m-d") }}</p> + <a class="btn btn-primary" + href="index.php?action=lireAdherent&login={{ $adherent->getLogin() }}"> + Lire les détails + </a> + </div> </div> - </div> - <?php } ?> + @endforeach + </div> </div> -</div> -<?=view('components.footer')?> + <?=view('components.footer')?> </body> </html> \ No newline at end of file diff --git a/TP4/ex1/resources/views/auteurs/les-auteurs.php b/TP4/ex1/resources/views/auteurs/les-auteurs.php index d9ad9238b485c6c8a8fa26acfb431a6760f3d416..e152377b394d8de14aa93f213f51e51917ba9fbe 100644 --- a/TP4/ex1/resources/views/auteurs/les-auteurs.php +++ b/TP4/ex1/resources/views/auteurs/les-auteurs.php @@ -9,19 +9,19 @@ <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) { ?> + @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> + <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?action=lireAuteur&numAuteur=<?=$auteur->getNumAuteur()?>"> + href="index.php?action=lireAuteur&numAuteur={{ $auteur->getNumAuteur() }}"> Lire les détails </a> </div> </div> - <?php } ?> + @endforeach </div> </div> <?=view('components.footer')?> diff --git a/TP4/ex1/resources/views/auteurs/un-auteur.php b/TP4/ex1/resources/views/auteurs/un-auteur.php index c6fc74d48b3c36d414574d020dfa4e8c4083f669..99ddff1ccc3a0849ff06824fecbe93e98af65dda 100644 --- a/TP4/ex1/resources/views/auteurs/un-auteur.php +++ b/TP4/ex1/resources/views/auteurs/un-auteur.php @@ -11,4 +11,4 @@ </div> <?=view('components.footer')?> </body> -</html><?php +</html> diff --git a/TP4/ex1/test.php b/TP4/ex1/test.php new file mode 100644 index 0000000000000000000000000000000000000000..b4b0768d6d4860515b8a279d57033cfd1a49c7ec --- /dev/null +++ b/TP4/ex1/test.php @@ -0,0 +1,4 @@ +<?php +$test = "TESTEUU"; +echo('Ceci est un <?=$test?>!'); +<?php foreach($2 as $3) { ?> \ No newline at end of file