IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

MVC : mon render n'envoie pas dans le template !


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    débutant
    Inscrit en
    Mai 2016
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : débutant

    Informations forums :
    Inscription : Mai 2016
    Messages : 56
    Points : 36
    Points
    36
    Par défaut 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...

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 html : Sélectionner tout - Visualiser dans une fenêtre à part
    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 html : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

    mais l'un d'entre vous pourrait m'indiquer ce qui cloche ?

    par avance merci

  2. #2
    Membre éclairé
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 381
    Points : 764
    Points
    764
    Par défaut
    Bonjour,

    Utilise le validateur w3c pour corriger ton code html, notamment :
    - le premier div.container-fluid ne devrait pas être dans la balise <head>
    - la balise <foot> n'existe pas, à remplacer par la balise <footer> qui doit être dans la balise <body> (aucun contenu dans head ou en dehors de body)
    - la balise </br> n'existe pas, c'est soit <br> ou <br />
    - quelques balises mal fermées

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    débutant
    Inscrit en
    Mai 2016
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : débutant

    Informations forums :
    Inscription : Mai 2016
    Messages : 56
    Points : 36
    Points
    36
    Par défaut
    @Pytet;

    Bonjour,
    je viens de procéder au toilettage du HTML, merci.

    cela ne résout pas le problème qui reste identique, même lorsque lorsque je dirige mon render sur un template default_2 minimaliste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <!DOCTYPE html>
    <html lang="fr">
     
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>default_2</title>
    </head>
     
    <body>
     
        <H1>Mon Super Site...</H1>
     
        <?php var_dump($contenu);?>
     
        <?= $contenu ?>
     
        <footer>
            <H2>...est vraiment génial !</H2>
        </footer>
    </body>
     
    </html>
    la liste reste déployée au dessus de <H1>Mon Super Site...</H1>
    le var_dump($contenu) =string '' (Length=0)
    et $contenu est @var unset $contenu

    ...

  4. #4
    Membre éclairé
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 381
    Points : 764
    Points
    764
    Par défaut
    Dans la méthode index de la classe UtilisateurController :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        // App\Controllers\UtilisateurController::index()
        $listeUtilisateur = $utilisateur->findAll($_SESSION['user']['id']);
        include_once ROOT . '/Views/Utilisateur/index.php';
        $this->render('Utilisateur/index', compact ('listeUtilisateur'),'default');
    Le problème vient du include_once, cette ligne devrait être supprimée puisque c'est l'appel de la fonction render à la ligne suivante qui va inclure la vue dans la variable $contenu du template.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    débutant
    Inscrit en
    Mai 2016
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : débutant

    Informations forums :
    Inscription : Mai 2016
    Messages : 56
    Points : 36
    Points
    36
    Par défaut
    Bravo Pytet et merci,
    tout rentre dans l'ordre

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-97] Si mon critère n'existe pas dans le filtre!
    Par leamoi dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 27/05/2010, 23h27
  2. Réponses: 3
    Dernier message: 09/07/2008, 11h29
  3. Réponses: 6
    Dernier message: 06/09/2007, 18h05
  4. mon .exe ne marche pas dans d'autre pc
    Par delhac_86 dans le forum C++Builder
    Réponses: 3
    Dernier message: 03/02/2007, 20h04
  5. mon poste n'existe pas dans voisinage réseau
    Par StyleXP dans le forum Administration
    Réponses: 6
    Dernier message: 13/03/2006, 14h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo