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 :

une méthode en appelle une autre via un lien [POO]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 508
    Billets dans le blog
    1
    Par défaut une méthode en appelle une autre via un lien
    Bonjour,

    mon besoin est le suivant : une méthode contient un lien dont le but est de déclencher l'exécution d'une autre méthode de la même classe.

    Donnons un exemple : j'ai une table de bdd "Billets" qui contient des billets et les commentaires associés. La classe Billets contient une méthode Read_All_Billetsqui va afficher tous les billets et proposer pour chacun un lien pour en afficher les commentaires.

    Code php : 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
     
    public function Read_All_Billets(){
      $pdo=new MYPDO();   // creation of an object for DB (instantiation of MYPDO)
      $ret=[];
      $Req='select id from `billets`';
      $var=$pdo->select($Req,[]);
      foreach($var as $id) {$ret[]=$this->Display_Billet($id['id']);}
      return($ret);
    }
     
    public function Display_Billet($id) {
      $ret=$this->Read_Billet($id);
      ?>
      <h3>
      <?php echo htmlspecialchars($ret[0]['titre']);?> le <em><?php echo $ret[0]['date_creation'];?></em>
      </h3>
      <p>
      <?php echo nl2br(htmlspecialchars($ret[0]['contenu']));?><br/>
      <em><a href="commentaires.php?billet=<?php echo $ret[0]['titre'];?>">Commentaires</a></em>
     
      </p>
      <?php
    }
    Dans le code actuel, l'affichage des commentaires est sensé être dans un autre fichier commentaires.php mais ça me paraîtrait plus logique que cet affichage soit logé dans une méthode appartenant à la même classe que Display_Billet. Mais aucune idée comment réaliser cela. Peut-on m'aiguiller ?

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    je ne vois pas trop où tu es en train de t'embarquer...
    Tu as fais une classe qui :
    - représente le concept de Billet
    - instancie le PDO, extrait des données
    - gère l'affichage
    - crache du html directement dans le buffer de sortie !

    je ne sais plus quoi te dire.
    Tiens au point où t'en es, quid de la gestion des routes ? Si tu me dis qu'elle est séparée de la classe, je ne te croirai pas.

  3. #3
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 508
    Billets dans le blog
    1
    Par défaut
    Oui, j'ai bien conscience d'être loin du concept du MVC. Mais pour assimiler les choses une par une (et ne pas me disperser ), j'ai décidé de mettre ça pour plus tard, et me concentrer uniquement sur la POO (et donc je mélange tout). N'est-ce pas une bonne approche ?

  4. #4
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    bah, la POO est mue principalement par l'adage : Diviser pour mieux régner ! Alors tout mélanger... ça va carrément à l'opposé de la base même du paradigme.
    Pourquoi n'es-tu pas parti de mes tutos ? Il y dedans des classes prêtes à l'emploi qui séparent les rôles.

    Je ne comprends pas trop ta démarche d'apprentissage : tu fais un pas en avant, un de côté, deux en arrière et pour finir tu t'emmêles les pinceaux et te ramasses une gamelle !
    Tu t'éparpilles trop.

    Purée quand je vois que tu traînes partout htmlspecialchars(), ça pique ! Le code de PhpEcho est hyper simple, il te solutionne le problème et non toi tu continues avec ta galère.
    Tiens, ton code html avec PhpEcho serait dans un fichier billet.php :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <h3><?= $this('titre') ?> le <em><?= $this('date_creation') ?></em></h3>
    <p>
      <?= nl2br($this('contenu')) ?><br>
      <em><a href="commentaires.php?billet=<?= rawurlencode($this['titre']) ?>">Commentaires</a></em>
    </p>
    Tu as la gestion de l'échappement, la gestion des inclusions, le passage des valeurs...

    Ta fonction Display... n'a pas à lire les données, elles doit les recevoir en paramètre sous forme de tableau et c'est elle qui passe tout ça au rendu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public function Display_Billet(array $data) 
    {
        return new PhpEcho('billet.php', $data); // ou echo
    }

  5. #5
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 508
    Billets dans le blog
    1
    Par défaut
    Ah oui ; je m'étais dit en 1 POO, et le reste (dont PhpEcho) plus tard. C'est clairement pas la bonne approche, donc PhpEcho en premier...Je clos donc cette discussion. OK comme ça ?

  6. #6
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    tu fais comme tu veux mon vieux, mais le problème est toujours le même : tu dois séparer les tâches à accomplir selon une logique objet.
    Regarde mon code du dessus : la manière de rendre la vue est séparée du Billet : la classe billet s'appuie sur un rendu externe qui est régi par ses propres règles : la classe Billet n'a pas à se préoccuper de savoir qu'il faut échapper les données, que la mise en page est faite ainsi ou ainsi... elle délègue ce travail à une autre classe qui s'en charge, la classe Billet sait juste comment appeler cette classe et comment lui passer ce dont elle a besoin pour faire son travail correctement. C'est la séparation des rôles !

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

Discussions similaires

  1. Passer d'une feuille de style à une autre via un formulaire
    Par kazute dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 15/10/2019, 20h21
  2. Réponses: 1
    Dernier message: 24/09/2018, 16h16
  3. Placement d une image sur une autre via des coordonnées X et y
    Par wwilly17 dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 19/12/2015, 22h36
  4. passer d'une feuille excel à une autre via vb
    Par malikmicrosoft dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 24/08/2007, 12h20
  5. Réponses: 3
    Dernier message: 09/02/2007, 14h26

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