MVC : mon render n'envoie pas dans le template !
bonjour à tous,
le problème : la page affiche les données du render non pas dans le template... mais au dessus !
voilà comment j'ai réussi...:oops:
tout commence avec une structure classique
classes
Controllers
Controller.php
MainController.php
UtilisateurController.php
Core
Models
Public
Views
Main
Utilisateur
index.php
login.php
profil.php
register.php
default.php
home.php
Autoloader.php
Controller.php
Code:
1 2 3 4 5 6 7 8 9 10 11
| namespace App\Controllers;
abstract class Controller
{
public function render(string $fichier, array $donnees = [], string $template='default')
{
<div style="margin-left:40px">extract($donnees);
ob_start();
require_once ROOT.'/Views/'.$fichier.'.php';
$contenu = ob_get_clean();
require_once ROOT.'/Views/'.$template.'.php';</div> }
} |
UtilisateurController.php
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| namespace App\Controllers;
use App\Core\Form;
use App\Models\UtilisateurModel;
class UtilisateurController extends Controller
{
...
public function index(){
{
if(isset($_SESSION['user']) && !empty($_SESSION['user']['id'])){
$utilisateur = new UtilisateurModel;
$listeUtilisateur = $utilisateur->findAll($_SESSION['user']['id']);
include_once ROOT . '/Views/Utilisateur/index.php';
$this->render('Utilisateur/index', compact ('listeUtilisateur'),'default');
}else{
$_SESSION['erreur']="Vous devez être connecté(e) pour accéder à cette page.";
header('Location: /Utilisateur/login');
exit;
} |
Views/Utilisateur/index.php
Code:
1 2 3 4 5 6 7 8 9 10 11
| <div id="block1" class="col-md-6 col-lg-4 col-xl-4 col-xxl-4">
Liste des utilisateurs : </p>
<?php foreach ($listeUtilisateur as $utilisateur) : ?>
<section>
<div><?="Identifiant : ". $utilisateur->identifiant ?></div>
<div><?="E mail : ". $utilisateur->email ?></div>
<div><?="Id_utilisateur : ". $utilisateur->id_utilisateur ?></div>
<p></p>
</section>
<?php endforeach;?>
</div> |
Views/default.php
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| <!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>default</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
<div class="container-fluid">
<div class="row text-white" style="background-color:darkblue ">
<h1></h1>
</br></br></br>
<h1>Mon Super Site...</h1>
<h6></h6>
</br>
</div>
</div>
</br>
</head>
<body>
<nav class="navbar navbar-expand-lg bg-body-tertiary fixed-top">
...
</nav>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js" integrity="sha384-w76AqPfDkMBDXo30jS1Sgez6pr3x5MlQ1ZAGC+nuZB+EYdgRZgiwxhTBTkF7CXvN" crossorigin="anonymous">
</script>
<div class="container">
<?php if (!empty($_SESSION['erreur'])) : ?>
<div class="alert alert-danger" role="alert">
<?php echo $_SESSION['erreur'];
unset($_SESSION['erreur']); ?>
</div>
<?php endif; ?>
<?php if (!empty($_SESSION['message'])) : ?>
<div class="alert alert-succes" role="alert">
<?php echo $_SESSION['message'];
unset($_SESSION['message']); ?>
</div>
<?php endif; ?>
<?php var_dump($contenu); ?>
<?= $contenu ?>
</div>
</body>
<foot>
<div class="container-fluid">
<div class="row text-white" style="background-color:darkblue ">
<h5>... est vraiment génial !</h5>
</div>
</foot>
</html> |
et donc la page Views/Utilisateur/index.php affiche, du haut vers le bas :
la navbar
la liste des utilisateurs
le header Mon Super Site...
le var_dump($contenu)= string'' (length=0)
le footer ... est vraiment génial !
je m'attendais naturellement à :
la navbar
le header Mon Super Site...
// var_dump($contenu);
la liste des utilisateurs
le footer ... est vraiment génial !
je vais revoir le footer !:mouarf:
mais l'un d'entre vous pourrait m'indiquer ce qui cloche ?
par avance merci