Partage
  • Partager sur Facebook
  • Partager sur Twitter

PHP objet - Gestion d'un mini site Web

    12 février 2017 à 16:04:34

    Bonjour, Bonsoir,

    La formation s'intensifie de plus en plus. Je dois gérer un mini site Web avec uniquement du PHP. Je rencontre quelques soucis. Je ne sais pas la manière de résoudre certains détails. Actuellement, j'essaie de gérer un menu via deux classes (Rubrique et Menu).

    Afin de tester ma classe Rubrique, j'ai créé des tableaux associatifs ($infosAccueil, $infosPresentation et $infosContact) avec l'id, le nom, ... Par contre, j'ai aussi un tableau de vérifications qui est un membre de la classe Rubrique.

    Comment encoder des données dans un tableau d'un tableau associatif (lignes 143, 162 et 173)?

    En même temps, j'aimerais l'avis de spécialiste concernant ma façon de créer tout en PHP.

    Est-ce qu'au niveau professionnel cela reste valable?

    Par la suite, je dois aussi faire des vérifications en JavaScript. Donc, la variable $js servira à cela. Ce n'est pas évident de tout écrire en PHP dans des variables. On n'a plus l'auto-complétion pour nous aider.

    J'entends souvent parler soit d'hydrater ou d'instancier un objet.

    Est-ce que ce sont des synonymes ou y a-t-il vraiment une différence entre les deux?

    Je vous remercie énormément d'avance pour votre aide.

    Sarah

    <?php
        $html1 = '<!DOCTYPE html><html lang="fr"><head>';
        $html1 .= '<title>Gestion dynamique d\'un mini site Web</title>';
        $html1 .= '<meta name="viewport" content="width=device-width, initial-scale=1.0">';
        $css =  '<style>
                body
                {
                    font-family: verdana, sans-serif;
                    font-size: 1.25em;
                    color: #000000;
                    margin: 0 auto;
                    padding: 0;
                    width: 95%;
                }
                </style>';
        $js = '<script language="javascript" type="text/javascript">';
        $js .= '</script>';
        $html2 = '</head><body><section><header>';
        $html2 .= '<h1>Gestion dynamique d\'un mini site Web</h1>';
        $html3 = '</header></section></body></html>';
    
        class Rubrique
        {
            private $id;
            private $nom;
            private $destination;
            private $classe;
            private $tableauVerifications = array();
            
            function __construct(array $donnees = null)
            {
                if($donnees)
                {
                    $this->hydrater($donnees);
                }
            }
            
            function setId($id)
            {
                $this->id = $id;
            }
    
            function setNom($nom)
            {
                $this->nom = $nom;
            }
    
            function setDestination($destination)
            {
                $this->destination = $destination;
            }
    
            function setClasse($classe)
            {
                $this->classe = $classe;
            }
            
            function setTableauVerifications($tableauVerifications)
            {
                $this->tableauVerifications = $tableauVerifications;
            }
    
            
            function getId()
            {
                return $this->id;
            }
    
            function getNom()
            {
                return $this->nom;
            }
    
            function getDestination()
            {
                return $this->destination;
            }
    
            function getClasse()
            {
                return $this->classe;
            }
            
            function getTableauVerifications()
            {
                return $this->tableauVerifications;
            }
            
            public function hydrater(array $donnees)
            {
                foreach ($donnees as $propriete => $valeur)
                {
                    $nomMethode = 'set' . ucfirst($propriete);
                    if (method_exists($this, $nomMethode))
                    {
                        $this->$nomMethode($valeur);
                    }
                }
            }
            
        }
    
        class Menu
        {
            private $tableauRubriques = array();
    
            public function __construct($tableauRubriques = null)
            {
                    if($tableauRubriques)
                    {
                        Rubrique::hydrater();
                    }
            }
            
            function setTableauRubriques($tableauRubriques)
            {
                $this->tableauRubriques = $tableauRubriques;
            }
            
            function getTableauRubriques()
            {
                return $this->tableauRubriques;
            }
            
            public function getCreerTableauRubriques()
            {
                $code = '<ul>';
                foreach($this->getTableauRubriques() as $rubrique)
                {
                    $code .= '<li id="'. $rubrique::Rubrique.getId() . '>';
                    $code .= '<a href="' . $rubrique::Rubrique.getDestination();
                    $code .= ' class="' . $rubrique::Rubrique.getClassse() . '"';
                    $code .= '>' . $rubrique::Rubrique.getNom() . '</li>';
                }
                $code += '</ul>';
                return $code;
            }
        }
        
        $infosAccueil = array
        (
            'id' => 'accueil', 
            'nom' => 'Accueil', 
            'destination' => '#', 
            'classe' => 'actif'
            // VERIFICATIONS: MIN: 5 CARACTÈRES ET MAX: 20 CARACTÈRES
        );
        
        $accueil = new Rubrique($infosAccueil);
        
        $afficherAccueil = '<p>' . $accueil->getId(). '<br />'; 
        $afficherAccueil .= $accueil->getDestination() . '<br />';
        $afficherAccueil .= $accueil->getClasse() . '<br />';
        $afficherAccueil .= $accueil->getNom() . '<br /></p>';
        
        $resultat = $html1 . $css . $js . $html2 . $afficherAccueil . $html3;
        echo $resultat;
        
        $infosPresentation = array
        (
            'id' => 'presentation', 
            'nom' => 'Presentation', 
            'destination' => '#', 
            'classe' => ''
            // VERIFICATIONS: MIN: 5 CARACTÈRES ET MAX: 20 CARACTÈRES
        );
        
        $presentation = new Rubrique($infosPresentation);
        
        $infosContact = array
        (
            'id' => 'contact', 
            'nom' => 'Contact', 
            'destination' => '#', 
            'classe' => ''
            // VERIFICATIONS: MIN: 5 CARACTÈRES ET MAX: 20 CARACTÈRES
        );
        
        $contact = new Rubrique($infosContact);
        
        $tableauRubriques = array ($accueil, $presentation, $contact);
        
        echo afficherTableauRubriques($tableauRubriques);
          
        function afficherTableauRubriques($tableauRubriques)
        {
            $code = '';
            foreach($tableauRubriques as $rubrique)
            {
                $code .= '<p>' . $rubrique->getId() . '<br />';
                $code .= $rubrique->getDestination() . '<br />';
                $code .= $rubrique->getNom() . '<br />';          
                $code .=  $rubrique->getNom() . '<br /></p>';
            }
            return $code;
        }
        
        $menu = new Menu($tableauRubriques);
        echo $menu->getCreerTableauRubriques();

    -
    Edité par DemandesInformations 17 février 2017 à 20:12:59

    • Partager sur Facebook
    • Partager sur Twitter
      13 février 2017 à 10:12:44

      Salut !

      Une petit erreur bien sympathique de php, += doit être utiliser uniquement pour des calculs... pas comme dans Javascript par exemple qui peux aussi être utiliser pour ajouter du texte.

      La fonction qui permet d'ajouter du texte c'est .= en php

      Bonne journée

      -
      Edité par Flamby66 13 février 2017 à 10:13:41

      • Partager sur Facebook
      • Partager sur Twitter
      Il existe 10 type de personne dans le monde. Ceux qui on comprit et les autres.
        13 février 2017 à 10:30:50

        Flamby66 a écrit:

        Salut !

        Une petit erreur bien sympathique de php, += doit être utiliser uniquement pour des calculs... pas comme dans Javascript par exemple qui peux aussi être utiliser pour ajouter du texte.

        La fonction qui permet d'ajouter du texte c'est .= en php

        Bonne journée

        -
        Edité par Flamby66 il y a 9 minutes

        Disons plus simplement que la syntaxe de la concaténation est propre au langage ^^
        ++
        • Partager sur Facebook
        • Partager sur Twitter
          13 février 2017 à 23:52:01

          Bonsoir Flamby66, Bonsoir christouphe,

          Je vous remercie pour votre réponse. C'est vrai que cette erreur est presque impardonnable. Cependant, le serveur pourrait au moins la signaler. Après avoir fait du JavaScript durant des semaines, des habitudes s'installent. J'ai édité mon code. J'ai trouvé des solutions par moi-même. Par contre, un autre problème est apparu. Ceci est la joie de la programmation.

          Est-ce que quelqu'un peut jeter un coup d'oeil?

          Je vous remercie énormément d'avance pour votre aide.

          Sarah

          • Partager sur Facebook
          • Partager sur Twitter
            14 février 2017 à 6:50:55

            SAlut !

            Alors voilà, j'ai repris la fin du code.

            echo afficherTableauRubriques($tableauRubriques); // tu a oublier d'appeler ta fonction
                 
                function afficherTableauRubriques($tableauRubriques)
                {
            	$code = ''; // Toujours définir sa variable pour éviter les erreurs 'undefined'
                    foreach($tableauRubriques as $rubrique)
                    {
                        $code .= '<p>' . $rubrique->getId() . '<br />'; // ici tu avait oublier le point donc a chaque boucle du foreach tu efface ta variable code résultat seul contact était afficher
                        $code .= $rubrique->getDestination() . '<br />';
                        $code .= $rubrique->getNom() . '<br />';           
                        $code .=  $rubrique->getNom() . '<br /></p>';
                    }
            	return $code;
                }

            Bonne journée

            -
            Edité par Flamby66 14 février 2017 à 6:51:26

            • Partager sur Facebook
            • Partager sur Twitter
            Il existe 10 type de personne dans le monde. Ceux qui on comprit et les autres.
              14 février 2017 à 9:19:45

              DemandesInformations a écrit:

              Bonsoir Flamby66, Bonsoir christouphe,

              Cependant, le serveur pourrait au moins la signaler.

              Sarah


              As-tu les erreurs serveurs activées ??

              http://php.net/manual/fr/function.error-reporting.php => E_ALL

              ++

              • Partager sur Facebook
              • Partager sur Twitter
                14 février 2017 à 19:26:18

                Bonsoir Flamby66,

                Je te remercie pour ta réponse. J'ai bien pensé l'oubli de l'appel de la fonction dans mon lit. Quant à l'initiation de la variable, ce n'est pas normal de l'oublier. Par contre, le .= à la première ligne, je n'y aurais pas pensé.

                Bonsoir christouphe,

                Je te remercie pour ta réponse. J'ai bien un affichage des erreurs (voir image avant correction). Par contre, j'ai entendu dire qu'il y avait différents niveaux. Cela se définirait dans le fichier config dans Wamp. Je n'ose pas trop faire des modifications. J'ai lu les informations de ton lien. Apparemment, on peut définir le niveau dans l'application.

                Bonsoir,

                De manière générale, je me demande si je vais arriver au bout de cette formation. Je dois arriver à coder rapidement sans poser des questions. Je suis de plus en plus découragée. Je verrai après les deux examens de cette semaine. J'ai édité le premier message pour les autres questions et la correction du code. Surtout que je suis loin d'être au résultat final.

                Je vous remercie énormément d'avance pour votre aide.

                Sarah

                -
                Edité par DemandesInformations 14 février 2017 à 19:55:30

                • Partager sur Facebook
                • Partager sur Twitter
                  17 février 2017 à 20:11:43

                  Bonsoir,

                  J'ai avancé un peu dans mon code. Cependant, je rencontre deux grosses erreurs (voir image). Je ne vois qu'une solution. Ce serait passer par de l'héritage. Donc, j'aurais une classe Generalite avec le constructeur et la fonction hydrater. Ensuite, mes classes Rubrique et Menu hériteraient de la classe Generalite.

                  Est-ce la meilleure solution?

                  Je vous remercie énormément d'avance pour votre aide.

                  Sarah

                  -
                  Edité par DemandesInformations 17 février 2017 à 20:13:29

                  • Partager sur Facebook
                  • Partager sur Twitter

                  PHP objet - Gestion d'un mini site Web

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown