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 :

erreur lors d'une mise en objet


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2017
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2017
    Messages : 90
    Points : 65
    Points
    65
    Par défaut erreur lors d'une mise en objet
    Bonjour a tous,
    Je suis sur un projet de blog qui doit etre en mvc et en poo.
    J'ai voulu mettre ma "vue" en objet. Je me suis basé sur ce tuto: http://bpesquet.developpez.com/tutor...hitecture-mvc/
    Mais j'ai toujours une erreur:Fatal error: Using $this when not in object context in C:\wamp64\www\forteroche\view\frontend\listPostsView.php on line 1

    Voici mon code:

    mon fichier view.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
    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
    <?php 
     
    class View {
     
      // Nom du fichier associé à la vue
      private $fichier;
      // Titre de la vue (défini dans le fichier vue)
      private $title;
     
      public function __construct($action) {
        // Détermination du nom du fichier vue à partir de l'action
        $this->fichier = "/forteroche/view/frontend/" . $action . ".php";
      }
     
      // Génère et affiche la vue
      public function generer($donnees) {
        // Génération de la partie spécifique de la vue
        $content = $this->genererFichier($this->fichier, $donnees);
        // Génération du gabarit commun utilisant la partie spécifique
        $view = $this->genererFichier('forteroche/view/frontend/template.php',
          array('title' => $this->title, 'content' => $content));
        // Renvoi de la vue au navigateur
        echo $view;
      }
     
      // Génère un fichier vue et renvoie le résultat produit
      private function genererFichier($fichier, $donnees) {
        if (file_exists($fichier)) {
          // Rend les éléments du tableau $donnees accessibles dans la vue
          extract($donnees);
          // Démarrage de la temporisation de sortie
          ob_start();
          // Inclut le fichier vue
          // Son résultat est placé dans le tampon de sortie
          require $fichier;
          // Arrêt de la temporisation et renvoi du tampon de sortie
          return ob_get_clean();
        }
        else {
          throw new Exception("Fichier '$fichier' introuvable");
        }
      }
    }
    mon fichier listPostView.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
    19
    <?php $this->title = 'Mon blog'; ?>
        <?php while ($data = $posts->fetch())
    {
    ?>
            <div class="news">
                <h3>
                        <?= htmlspecialchars($data['chapter']) ?> :
                <?= htmlspecialchars($data['title']) ?>
                <em>le <?= $data['creation_date_fr'] ?></em>
            </h3>
                <p>
                    <?= nl2br(htmlspecialchars($data['content'])) ?>
                        <br/>
                        <br/> <em><a href="index.php?action=post&amp;id=<?= $data['id'] ?>">Lire le chapitre...</a></em> </p>
            </div>
            <?php
    }
    $posts->closeCursor();
    ?>
    mon template:
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <!DOCTYPE html>
    <html>
     
    <head>
        <meta charset="utf-8" />
        <title>
            <?= $title ?>
        </title>
        <link href="public/css/style.css" rel="stylesheet" /> </head>
     
    <body>
        <nav class="navbar navbar-default navbar-fixed-top">
            <div class="container">
                <div class="navbar-header">
                    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#myNavbar"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button>
                </div>
                <div class="collapse navbar-collapse" id="myNavbar">
                    <ul class="nav navbar-nav">
                        <li><a href="#about">Billet simple pour l'Alaska</a></li>
                        <li><a href="#portfolio">Accueil</a></li>
                        <li><a href="#recommandations">Connexion</a></li>
                    </ul>
                </div>
            </div>
        </nav>
        <div id="container">
            <div col-md-12><img id="paysage" src="/forteroche/images/landscape.jpg" class="img-responsive" alt="Responsive image"></div>
        </div>
        <?= $content ?>
            <footer id="footer">
                <p>jeanforteroche</p>
            </footer>
    </body>
     
    </html>
    Apparemment c'est un problème d'instanciation de mon objet. mais je n'arrive pas a résoudre le souci.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    $this c'est la classe à l'intérieur d'elle même.
    remplace le par l'instanciation de ta classe.

    Mieux, il te faudrait un "setter" dans ta classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function setTitle($title) {
       $this->title = $title;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $obj->setTitle('ton titre');

  3. #3
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2017
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2017
    Messages : 90
    Points : 65
    Points
    65
    Par défaut
    J'ai essayé mais c'a ne marche pas , peut etre est ce moi qui m'y prend mal.

    Mais pourquoi dans le tuto cela fonctionne t il?

    https://github.com/bpesquet/MonBlog/tree/mvc-objet/Vue

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Tu n’appelles pas directement listPostView.php, n'est-ce pas ? Tu passes bien par ton controlleur, qui crée ton object View qui inclut listPostView ?

  5. #5
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2017
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2017
    Messages : 90
    Points : 65
    Points
    65
    Par défaut
    Oui effectivement:
    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
    <?php
     
    // Chargement des classes
    require_once('model/PostManager.php');
    require_once('model/CommentManager.php');
     require_once('view/frontend/view.php');
    function listPosts()
    {
        $postManager = new \Open Classrooms\Blog\Model\PostManager();
        $posts = $postManager->getPosts();
        $view = new View('listPostsView');
        $view->generer(array('posts' => $posts));
     
     
    }
    Merci cela fonctionne.

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

Discussions similaires

  1. Erreurs lors d'une mise en place d'une requête cron PHP
    Par Pierrick81 dans le forum Langage
    Réponses: 14
    Dernier message: 27/06/2011, 17h40
  2. [WD14] Erreur lors d'une mise à jour de procédure stocké
    Par klbsjpolp dans le forum HyperFileSQL
    Réponses: 0
    Dernier message: 16/07/2009, 18h45
  3. Firebird : Erreur lors d'une mise a niveau.
    Par TryExceptEnd dans le forum Administration
    Réponses: 4
    Dernier message: 24/10/2008, 20h18

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