Partage
  • Partager sur Facebook
  • Partager sur Twitter

MOOC Programmez en orienté objet en PHP

    2 novembre 2019 à 2:17:00

    Bonjour Christian,

    C'est très gentil de ta et je suis heureux te t'avoir permis à trouver une solution. Pour le reste, suis le cours attentivement (je te le conseille). Il est vrai que la dernière évaluation fait très peur mais (même si j'ai eu moi-même très peur au départ) mais au final j'ai fini par commencer (c(est cela le plus dur) et puis, de proche rn proche on arrive presque tous a concevoir un système qui marche. L'informatique, vois tu c'est avant de ka logique 1 ou 0 ! Après il faut un peu réfléchir et, je te l'assure, on arrive à faire un "truc" qui marche. 

    N'hésites pas à revenir voir nous, ce sera toujours un plaisir.

    Cordialement,

    Patrick

    • Partager sur Facebook
    • Partager sur Twitter
      2 novembre 2019 à 23:27:53

      Bonjour ici !

      Bon, j'ai à peu près capté la plupart des points du cours (parfois faut un peu s'accrocher, mais c'est un bon cours :)), et maintenant place à la pratique. Avant ça, il y a un point qui me chagrine, enfin, je croyais comprendre jusqu'à ce passage qui n'est pas clair pour moi. C'est sur cette leçon : https://openclassrooms.com/fr/courses/1665806-programmez-en-oriente-objet-en-php/1666289-manipulation-de-donnees-stockees

      Dans la classe Manager (extrait ci-dessous) :

      //A
      private $_db;
      
      //B
      public function __construct($db)
      {
          $this->setDb($db);
      }
      
      //C
      public function setDb(PDO $db)
      {
          $this->_db = $db;
      }
      

      A : $_db est un attribut contenant une instance PDO (question 1 : instance PDO préalablement créée ? où ?)

      B : à chaque création d'une nouvelle instance Manager, on appelle la fonction setDb()

      C : on déclare une fonction setDb() ayant pour paramètre "PDO $db". (question 2 : pourquoi "PDO $db" et pas juste "db" ? ça signifie quoi ?)

      Cette fonction setDb() fait que l'attribut qui contient l'instance PDO (càd $_db) prend la valeur "$db". (question 3 : mais c'est quoi "$db" ??)

      Voilà, j'ai réussi à me paumer avec ça. Si vous le pouvez, merci d'avance pour une explication avec des mots simples, pas de jargon, comme si vous deviez expliquer ça à un enfant de 6 ans ;-)

      Edit : ça n'empêche rien de fonctionner. Mais je n'aime pas ne pas comprendre pourquoi ça marche !

      -
      Edité par OmarZig 2 novembre 2019 à 23:30:19

      • Partager sur Facebook
      • Partager sur Twitter
        3 novembre 2019 à 0:08:05

        Bonjour,

        Alors dans l'ordre :

        A - L'objet $db doit effectivement être créer avant le manager. Dans cette partie du cours, elle est crée au tout début du fichier index

        $db = new PDO('mysql:server='.$host.';dbname='.$database.';charset=utf8', root, '');


        et dans ce cas, dans le manager $_db est une propriété privée de la classe manager et pour la lier à la l'objet PDO crée ci-dessus il faut passer par le setter :

        public function set_db(PDO $db) : void
        {
            $this -> _db = $db;
        }
        

        C'est donc un objet PDO qui doit être passé en argument. PDO devant le paramètre est le type de donné du paramètre. Il est en effet possible dans tous les cas de préciser comme je l'ai fait sur la déclaration de la méthode les types des paramètres passés en argument ainsi que le type de données renvoyée (ici void). Les dernières normes de PHP impose d'ailleurs de donner ces précisions.

        Et donc ta question B est oui, chaque instance du manager doit appeler cette méthode mais cela n'implique pas forcement que l'on doivent relire la base de données puisque elle est déjà présente dans l'objet $db.

        Pour ta question C, les réponses figurer déjà dans mes réponses précédentes.

        Est-ce que cette explication réponds à ta demande ? Merci de me le préciser.

        Cordialement

        Patrick

        • Partager sur Facebook
        • Partager sur Twitter
          4 novembre 2019 à 12:44:58

          Bonjour,

          Je suis aussi perdue qu'OmarZig sur le cours https://openclassrooms.com/fr/courses/1665806-programmez-en-oriente-objet-en-php/1666289-manipulation-de-donnees-stockees

          J'ai bien l'appel à la db mais je ne sais pas quoi en faire.

          Je ne vois pas comment créer mes fichiers, j'ai :

          • un fichier Personnage
          • un fichier PersonnagesManager
          • et ce bout de code dont je ne sais pas quoi faire où le placer
          • <?php 
            
            // On admet que $db est un objet PDO.
            $request = $db->query('SELECT id, nom, forcePerso, degats, niveau, experience FROM personnages');
                
            while ($donnees = $request->fetch(PDO::FETCH_ASSOC)) // Chaque entrée sera récupérée et placée dans un array.
            {
              // On passe les données (stockées dans un tableau) concernant le personnage au constructeur de la classe.
              // On admet que le constructeur de la classe appelle chaque setter pour assigner les valeurs qu'on lui a données aux attributs correspondants.
              $perso = new Personnage($donnees);
                    
              echo $perso->nom(), ' a ', $perso->forcePerso(), ' de force, ', $perso->degats(), ' de dégâts, ', $perso->experience(), ' d\'expérience et est au niveau ', $perso->niveau();
            }

          Personnage :

          <?php 
          class Personnage
          {
          	private $_id;
          	private $_nom;
          	private $_forcePerso;
          	private $_degats;
          	private $_niveau;
          	private $_experience;
          
          	//Un tableau de données doit être passé à la fonction (d'où le  préfixe "array").
          	public function hydrate(array $donnees)
          	{
          		foreach ($donnees as $key => $value)
          		{
          			$method = 'set'.ucfirst($key);
          			if (method_exists($this, $method))
          			{
          				$this->$method($value);
          			}
          		}
          	}
          
          	//liste des getters
          	public function id() { return $this->_id; }
          
          	public function nom() { return $this->_nom; }
          
          	public function forcePerso() { return $this->_forcePerso; }
          
          	public function degats() { return $this->_degats; }
          
          	public function niveau() { return $this->_niveau; }
          
          	public function experience() { return $this->_experience; }
          
            // Liste des setters
          	public function setId($id)
          	{
          	// On convertit l'argument en nombre entier.
              // Si c'en était déjà un, rien ne changera.
              // Sinon, la conversion donnera le nombre 0 (à quelques exceptions près, mais rien d'important ici).
          		$id = (int) $id;
          	}
          
          	public function setNom($nom)
          	{
          		// On vérifie qu'il s'agit bien d'une chaîne de caractères.
          		if (is_string($nom))
          		{
          		  $this->_nom = $nom;
          		}
          	}
            
          	public function setForcePerso($forcePerso)
          	{
          		$forcePerso = (int) $forcePerso;
          	
          		if ($forcePerso >= 1 && $forcePerso <= 100)
          		{
          			$this->_forcePerso = $forcePerso;
          		}
          	}
            
          	public function setDegats($degats)
          	{
          		$degats = (int) $degats;
          	
          		if ($degats >= 0 && $degats <= 100)
          		{
          			$this->_degats = $degats;
          		}
          	}
            
          	public function setNiveau($niveau)
          	{
          		$niveau = (int) $niveau;
          	
          		if ($niveau >= 1 && $niveau <= 100)
          		{
          			$this->_niveau = $niveau;
          		}
          	}
            
          	public function setExperience($experience)
          	{
          		$experience = (int) $experience;
          	
          		if ($experience >= 1 && $experience <= 100)
          		{
          			$this->_experience = $experience;
          		}
          	}
          	
          }

           PersonnagesManager :

          <?php 
          class PersonnagesManager
          {
          	public function __construct($db)
          	{
          		$this->setDb($db);
          	}
          
          	public function add(Personnage $perso)
          	{
          		$q = $this->_db->prepare('INSERT INTO personnages(nom, forcePerso, degats, niveau, experience) VALUES (:nom, :forcePerso, :degats, :niveau, :experience)');
          		
          		$q->bindValue(':nom', $perso->nom());
          		$q->bindValue(':forcePerso', $perso->forcePerso(), PDO::PARAM_INT);
          		$q->bindValue(':degats', $perso->degats(), PDO::PARAM_INT);
          		$q->bindValue(':niveau', $perso->niveau(), PDO::PARAM_INT);
          		$q->bindValue(':experience', $perso->experience(), PDO::PARAM_INT);
          
          		$q->execute();
          	}
          
          	public function delete(Personnage $perso)
          	{
          		$this->_db->exec('DELETE FROM personnages WHERE id = '.$perso->id());
          	}
          
          	public function get($id)
          	{
          		$id = (int) $id;
          
          		$q = $this->_db->query('SELECT id, nom, forcePerso, degats, niveau, experience FROM personnages WHERE id = '.$id);
          		$donnees = $q->fetch(PDO::FETCH_ASSOC);
          
          		return new Personnage($donnees);
          	}
          
          	public function getList()
          	{
          		$persos = [];
          
          		$q = $this->_db->query('SELECT id, nom, forcePerso, degats, niveau, experience FROM personnages ORDER BY nom');
          
          		while($donnees = $q->fetch(PDO::FETCH_ASSOC))
          		{
          			$persos[] = new Personnage($donnees);
          		}
          		return $persos;
          	}
          
          	public function update(Personnage $perso)
          	{
          		$q = $this->_db->prepare(UPDATE personnages SET forcePerso=:forcePerso, degats:=degats, niveau=:niveau, experience=:experience WHERE id=:id);
          
          		$q->bindValue(':forcePerso', $perso->forcePerso(), PDO::PARAM_INT);
          		$q->bindValue(':degats', $perso->degats(), PDO::PARAM_INT);
          		$q->bindValue(':niveau', $perso->niveau(), PDO::PARAM_INT);
          		$q->bindValue(':experience', $perso->experience(), PDO::PARAM_INT);
          		$q->bindValue(':id', $perso->id(), PDO::PARAM_INT);
          
          		$q->execute();
          	}
          
          	public function __construct($db)
          	{
          		$this->setDb($db);
          	}
          }
          
          $perso = new Personnage([
            'nom' => 'Victor',
            'forcePerso' => 5,
            'degats' => 0,
            'niveau' => 1,
            'experience' => 0
          ]);
          
          $db = new PDO('mysql:host=localhost;dbname=jeu_combat', 'root', '');
          $manager = new PersonnagesManager($db);
          $manager->add($perso);

          Merci de votre aide



          • Partager sur Facebook
          • Partager sur Twitter
            4 novembre 2019 à 20:34:28

            Bonjour Céline,

            Pour te répondre assez simplement, ton bout de code devrait te lister à l'écran la liste des personnages. Tout marcherait parfaitement si lors de la création du personnage (ou après) il existait un appel à tous les setters de Personnage. C'est l'objet, je crois, de ce chapitre du cours et de la méthode hydrate qui automatise l'appel de tous les setters. 

            public function hydrate(array $donnees): void
            {
                foreach ($donnees as $key => $value)
                {
                    $method = 'set'.ucfirst($key);
                    if (method_exists($this, $method))
                    {
                        $this -> $method($value);
                    }
                }
            }
            

            Après cela, soit tu crées ton personnage puis tu appelles la méthode hydrate :

            $perso = new Personnage();
            $perso -> hydrate($donnees);
            

            Soit tu crées un constructeur qui, comme il est écrit dans un des commentaires du premier code que tu as envoyé, fait appel directement à la méthode hydrate. En effet, dans ton code on trouve $perso = new Personnage($donnees) où $donnees est un tableau (array) mais aucun constructeur correspondant, c'est à dire qui accepte un tableau en argument n'existe. Et, malheureusement, PHP, ne signale pas cette erreur lors de la surcharge d'un constructeur. 

            Plus simplement, il faudrait faire :

            public function hydrate(array $donnees): void
            {
                foreach ($donnees as $key => $value)
                {
                    $method = 'set'.ucfirst($key);
                    if (method_exists($this, $method))
                    {
                        $this -> $method($value);
                    }
                }
            }
                
            public function __construct(array $donnees)
            {
                $this -> hydrate($donnees);
            }
            

            Et cette fois, cela marchera lorsque tu appelleras les getters du personnage par $perso -> nom() par exemple, qui pour l'instant ne te renvoyais rien.

            Ce que je te propose c'est de mettre ton bout de code dans un fichier test.php et d'essayer. Cela devrait marcher. 

            Il y a aussi une petite erreur dans ta classe PersonnageManager() où la méthode __construct($db) est répétée 2 fois.

            Afin de t'aider à mieux comprendre, j'ai reconstruit tout cela et créée un fichier index.php qui utilise ce principe et permet de créer autant de personnage que tu le souhaiteras.

            Afin de ne pas encombrer ce post, je te mets un lien contenant l'ensemble des fichiers nécessaires.

            Voilà, j'espère que cela t'éclairera davantage. Dans tous les cas, je te remercie de nous informer si cela a (ou non) répondu à tes interrogations.

            Cordaialement

            Patrick

            • Partager sur Facebook
            • Partager sur Twitter
              5 novembre 2019 à 15:21:54

              Bonjour,

              Tout d'abord merci Patrick. Tout n'est pas encore limpide mais tes explications m'ont beaucoup aidé. Et j'ai reussi l'exercice. J'ai essayé de le mettre en MVC mais je crois que c'est un peu trop pour mon niveau encore...

              J'aurai encore quelques questions :

              A quoi sert la méthode:

              public function setDb(PDO $db)
                  {
                      $this -> _db = $db;
                  }

              et pourquoi faut-il également un constructor dans la méthode PersonnagesManager ?

              Encore merci de ton aide,

              Céline

              • Partager sur Facebook
              • Partager sur Twitter
                6 novembre 2019 à 1:36:45

                Bonjour Céline,

                C'est assez simple en fait, à chaque fois que le manager est appelé pour une quelconque requête, on trouve toujours :

                $req = _dbd -> execute (ou prépare) 

                à ce moment là il faut que le manager sache ce que représente _db (d'où d'ailleurs ta question…)

                Et, c'est UNIQUEMENT lors de la création du manager lorsque l'on fait :

                $manager = new PersonnageManager($db);

                que le constructeur (dont tu parles) s'exécute et crée une relation entre la base de données réelle et la variable $_db de la classe.

                Ce constructeur est donc nécessaire pour établir cette relation. Ensuite, chaque requête, par l'intermédiaire de $_db permet d'interroger la base de données réelle.

                Je ne sais pas si tu comprends mieux. Dis le moi, c'est important.

                Bon courage, ce cours que j'ai fini avec succès, n'est vraiment pas facile.

                Amicalement

                Patrick

                • Partager sur Facebook
                • Partager sur Twitter
                  6 novembre 2019 à 8:47:58

                  Bonjour Patrick,

                  En effet, c'est un cours assez ardu! tes explications sont très claires et le TP qui suit le cours permet également de remettre à un peu tout à plat.

                  J'ai compris la logique et le fonctionnement, maintenant pas sure que je sois encore capable de le faire seule mais à force d'entrainement...

                  En tout cas merci beaucoup pour le temps que tu prends à expliquer simplement les choses.

                  Céline

                  • Partager sur Facebook
                  • Partager sur Twitter
                    7 novembre 2019 à 2:13:41

                    Ah, trop cool, merci Patrick !
                    J'ai compris, c'est beaucoup plus clair comme ça !
                    Ma réactivité est moins bonne que la votre, semaine trop chargée par ailleurs pour retourner avant sur Open Classrooms!
                    (A, B et C n'étaient pas des questions, mais les marqueurs pour indiquer les morceaux de code plus clairement ; mais vous avez bien répondu à mes interrogations !)
                    Je n'avais pas trouvé d'info qui me paraissait assez claire dans les commentaires précédents ;)
                    Merci encore, j'avance dans mon apprentissage et ma compréhension !
                    Omar
                    • Partager sur Facebook
                    • Partager sur Twitter
                      14 novembre 2019 à 17:09:14

                      creation d'un topic dsl

                      -
                      Edité par iSecDoe 15 novembre 2019 à 10:37:42

                      • Partager sur Facebook
                      • Partager sur Twitter
                        19 novembre 2019 à 17:16:31

                        Bonjour je ne comprends pas pourquoi une insertion dans un champ date mysql accepte

                        $dateContact2 = $_POST['dateContact2'];
                        if (empty($dateContact2)){$dateContact2='1970-01-01';}

                        mais refuse ça :

                        $dateContact4 = $_POST['dateContact4'];
                        if (empty($dateContact3)){$dateContact3=NULL;}

                        ou ça :

                        $dateContact4 = $_POST['dateContact4'];
                        if (empty($dateContact3)){$dateContact3='0000-00-00';}

                        Le champ de la bdd est de format 'date' et null par défaut. Quelqu'un aurait une idée ??

                        -
                        Edité par Fasan 19 novembre 2019 à 17:18:41

                        • Partager sur Facebook
                        • Partager sur Twitter
                          23 novembre 2019 à 14:35:18

                          Bonjour Fasan,

                          En ce qui concerne les type date, datetime et timestamp, la documentation officielle de MySQL précise les bornes de chaque type, je cite

                          The DATE type is used for values with a date part but no time part. MySQL retrieves and displays DATE values in 'YYYY-MM-DD' format. The supported range is '1000-01-01' to '9999-12-31'. 
                          The DATETIME type is used for values that contain both date and time parts. MySQL retrieves and displays DATETIME values in 'YYYY-MM-DD hh:mm:ss' format. The supported range is '1000-01-01 00:00:00' to '9999-12-31 23:59:59'. 
                          The TIMESTAMP data type is used for values that contain both date and time parts. TIMESTAMP has a range of '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC. 

                          De plus, selon le mode dans lequel est votre configuration de MySQL, toujours la documentation officielle précise les cas où une date 0000-00-00 peut ou non être acceptée.

                          Dans tous les cas, la date "0000-00-00" n'est pas dans la plage correcte du type DATE ou DATETIME et ne peut donc être visiblement pas affectée à cette valeur. C'est la même chose si l'on tente d'imposer une date avec la valeur nulle. Il semble cependant que lorsque le mode sql ne précise pas "no zero in date", ce soit "0000-00-00" qui est enregistré s'il n'y a pas de date de précisé mais c'est uniquement MySQL qui peut placer cette valeur par défaut en l'absence de donnée pour ce champ.

                          Voilà, sauf mauvaise interprétation de la documentation de MySQL, ce que je peux te proposer comme réponse à tes interrogations. La première valeur que vous proposez passe normalement puisqu'elle est située dans la plage de date acceptée.

                          Cordialement

                          Patrick



                          • Partager sur Facebook
                          • Partager sur Twitter
                            7 décembre 2019 à 21:08:42

                            Bonjour,

                            J'essaye désespéremment de gérer une liaison Doctrine ManyToOne entre une table UserApp et RoleApp, avec dans la table UserApp la clef étrangère role_id, mais j'ai des difficultés à faire marcher tout ça ; il y a un détail qui m'échappe mais je n'arrive pas à trouver. Merci par avance pour votre aide, je poste mon code ;

                            <?php

                            /*
                            * This file is part of the Symfony package.
                            *
                            * (c) Fabien Potencier <fabien@symfony.com>
                            *
                            * For the full copyright and license information, please view the LICENSE
                            * file that was distributed with this source code.
                            */

                            namespace App\Entity;

                            use Doctrine\ORM\Mapping as ORM;
                            use Symfony\Component\Security\Core\User\UserInterface;
                            use Symfony\Component\Validator\Constraints as Assert;
                            use App\Repository\UserRoleRepository;

                            /**
                            * @ORM\Entity(repositoryClass="App\Repository\UserAppRepository")
                            * @ORM\Table(name="user_app")
                            *
                            * Defines the properties of the User entity to represent the application users.
                            * See https://symfony.com/doc/current/book/doctrine.html#creating-an-entity-class
                            *
                            * Tip: if you have an existing database, you can generate these entity class automatically.
                            * See https://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html
                            *
                            * @author Ryan Weaver <weaverryan@gmail.com>
                            * @author Javier Eguiluz <javier.eguiluz@gmail.com>
                            */
                            class UserApp implements UserInterface, \Serializable
                            {
                            /**
                            * @var int
                            *
                            * @ORM\Id
                            * @ORM\GeneratedValue
                            * @ORM\Column(type="integer")
                            */
                            private $id;

                            /**
                            * @var string
                            *
                            * @ORM\Column(type="string", unique=true)
                            * @Assert\NotBlank()
                            * @Assert\Length(min=2, max=50)
                            */
                            private $username;

                            /**
                            * @var string
                            *
                            * @ORM\Column(type="string", unique=true)
                            * @Assert\Email()
                            */
                            private $email;

                            /**
                            * @var string
                            *
                            * @ORM\Column(type="string")
                            */
                            private $password;

                            /**
                            * @ORM\Column(type="integer")
                            */
                            private $affectationUnitId;

                            /**
                            * @ORM\Column(type="datetime", nullable=true)
                            */
                            private $createdAt;

                            /**
                            * @ORM\Column(type="datetime")
                            */
                            private $updatedAt;

                            /**
                            * @ORM\Column(type="boolean")
                            */
                            private $isActive;

                            /**
                            * @var UserRole
                            * @ORM\ManyToOne(targetEntity="App\Entity\UserRole")
                            * @ORM\JoinColumn(nullable=false)
                            *
                            */
                            private $role;


                            /**
                            * @ORM\Column(type="string", length=60)
                            */
                            private $firstName;

                            /**
                            * @ORM\Column(type="string", length=60)
                            */
                            private $lastName;




                            public function getId(): ?int
                            {
                            return $this->id;
                            }

                            public function getFirstName(): ?string
                            {
                            return $this->firstName;
                            }

                            public function setFirstName(string $firstName): self
                            {
                            $this->firstName = $firstName;

                            return $this;
                            }

                            public function getLastName(): ?string
                            {
                            return $this->lastName;
                            }

                            public function setLastName(string $lastName): self
                            {
                            $this->lastName = $lastName;

                            return $this;
                            }

                            public function getFullName()
                            {
                            return "{$this->firstName} {$this->lastName}";
                            }

                            public function getUsername(): ?string
                            {
                            return $this->username;
                            }

                            public function setUsername(string $username): void
                            {
                            $this->username = $username;
                            }

                            public function getEmail(): ?string
                            {
                            return $this->email;
                            }

                            public function setEmail(string $email): void
                            {
                            $this->email = $email;
                            }

                            public function getPassword(): ?string
                            {
                            return $this->password;
                            }

                            public function setPassword(string $password): void
                            {
                            $this->password = $password;
                            }

                            /**
                            * Returns the roles or permissions granted to the user for security.
                            */
                            public function getRoles(): array
                            {
                            $UserRoleRepository = new UserRoleRepository();
                            $roleObj = $UserRoleRepository->getUserRole($this);
                            dump($roleObj);
                            return [];

                            //return array_unique($roleObj);
                            }

                            /* public function getRoles(): array
                            {
                            return ["ROLE_ADMIN"];
                            }*/

                            public function setUserRole(UserRole $role): void
                            {
                            $this->role = $role;
                            }

                            public function getUserRole(): string
                            {
                            return $this->role;
                            }

                            /**
                            * Returns the salt that was originally used to encode the password.
                            *
                            * {@inheritdoc}
                            */
                            public function getSalt(): ?string
                            {
                            // See "Do you need to use a Salt?" at https://symfony.com/doc/current/cookbook/security/entity_provider.html
                            // we're using bcrypt in security.yml to encode the password, so
                            // the salt value is built-in and you don't have to generate one

                            return null;
                            }

                            public function getAffectationUnitId(): ?int
                            {
                            return $this->affectationUnitId;
                            }

                            public function setAffectationUnitId(int $affectationUnitId): self
                            {
                            $this->affectationUnitId = $affectationUnitId;

                            return $this;
                            }

                            public function getCreatedAt(): ?\DateTimeInterface
                            {
                            return $this->createdAt;
                            }

                            public function setCreatedAt(?\DateTimeInterface $createdAt): self
                            {
                            $this->createdAt = $createdAt;

                            return $this;
                            }

                            public function getUpdatedAt(): ?\DateTimeInterface
                            {
                            return $this->updatedAt;
                            }

                            public function setUpdatedAt(\DateTimeInterface $updatedAt): self
                            {
                            $this->updatedAt = $updatedAt;

                            return $this;
                            }

                            public function getIsActive(): ?bool
                            {
                            return $this->isActive;
                            }

                            public function setIsActive(bool $isActive): self
                            {
                            $this->isActive = $isActive;

                            return $this;
                            }

                            /**
                            * Removes sensitive data from the user.
                            *
                            * {@inheritdoc}
                            */
                            public function eraseCredentials(): void
                            {
                            // if you had a plainPassword property, you'd nullify it here
                            // $this->plainPassword = null;
                            }

                            /**
                            * {@inheritdoc}
                            */
                            public function serialize(): string
                            {
                            // add $this->salt too if you don't use Bcrypt or Argon2i
                            return serialize([$this->id, $this->username, $this->password]);
                            }

                            /**
                            * {@inheritdoc}
                            */
                            public function unserialize($serialized): void
                            {
                            // add $this->salt too if you don't use Bcrypt or Argon2i
                            [$this->id, $this->username, $this->password] = unserialize($serialized, ['allowed_classes' => false]);
                            }

                            /**
                            * Returns the roles in string format for eeasyadmin.
                            */
                            public function getRoleValue(): string
                            {
                            return implode(" ", $this->getRoles());
                            }
                            }
                            <?php
                            
                            namespace App\Entity;
                            
                            use Doctrine\Common\Collections\ArrayCollection;
                            use Doctrine\Common\Collections\Collection;
                            use Doctrine\ORM\Mapping as ORM;
                            
                            /**
                             * @ORM\Entity(repositoryClass="App\Repository\UserRoleRepository")
                             */
                            class UserRole
                            {
                                /**
                                 * @ORM\Id()
                                 * @ORM\GeneratedValue()
                                 * @ORM\Column(type="integer")
                                 */
                                private $id;
                            
                                /**
                                 * @ORM\Column(type="string", length=255)
                                 */
                                private $roleName;
                            
                                /**
                                 * @ORM\Column(type="json")
                                 */
                                private $appRole = [];
                            
                                /**
                                 * @ORM\Column(type="datetime", nullable=true)
                                 */
                                private $createdAt;
                            
                                /**
                                 * @ORM\Column(type="datetime")
                                 */
                                private $updatedAt;
                            
                                /**
                                 * @ORM\Column(type="boolean")
                                 */
                                private $isActive;
                            
                                /**
                                 * @ORM\Column(type="integer")
                                 */
                                private $parentRole;
                            
                                /**
                                 * @ORM\Column(type="integer")
                                 */
                                private $ordre;
                            
                            
                                public function __construct()
                                {
                            
                                }
                            
                                public function getId(): ?int
                                {
                                    return $this->id;
                                }
                            
                                public function getRoleName(): ?string
                                {
                                    return $this->roleName;
                                }
                            
                                public function setRoleName(string $roleName): self
                                {
                                    $this->roleName = $roleName;
                            
                                    return $this;
                                }
                            
                                public function getAppRole(): ?array
                                {
                            
                                    $roles = $this->appRole;
                            
                                    if (empty($roles)) {
                                        $roles[] = 'ROLE_USER';
                                    }
                            
                                    return array_unique($roles);
                                }
                            
                            
                                public function getThecrole() :?string
                                {
                            
                                    $roles = $this->getAppRole();
                                    $oneRole = "";
                                    foreach ($roles as $role){
                                        $oneRole = $role;
                                    }
                                    return $oneRole;
                                }
                            
                                public function setAppRole(array $appRole): void
                                {
                                    $this->appRole = $appRole;
                                }
                            
                                public function getCreatedAt(): ?\DateTimeInterface
                                {
                                    return $this->createdAt;
                                }
                            
                                public function setCreatedAt(?\DateTimeInterface $createdAt): self
                                {
                                    $this->createdAt = $createdAt;
                            
                                    return $this;
                                }
                            
                                public function getUpdatedAt(): ?\DateTimeInterface
                                {
                                    return $this->updatedAt;
                                }
                            
                                public function setUpdatedAt(\DateTimeInterface $updatedAt): self
                                {
                                    $this->updatedAt = $updatedAt;
                            
                                    return $this;
                                }
                            
                                public function getIsActive(): ?bool
                                {
                                    return $this->isActive;
                                }
                            
                                public function setIsActive(bool $isActive): self
                                {
                                    $this->isActive = $isActive;
                            
                                    return $this;
                                }
                            
                                public function getOrdre(): ?int
                                {
                                    return $this->ordre;
                                }
                            
                                public function setOrdre(int $ordre): self
                                {
                                    $this->ordre = $ordre;
                            
                                    return $this;
                                }
                            
                                public function getParentRole(): ?int
                                {
                                    return $this->parentRole;
                                }
                            
                                public function setParentRole(int $parentRole): self
                                {
                                    $this->parentRole = $parentRole;
                            
                                    return $this;
                                }
                            
                            
                            
                            }
                            
                            <?php
                            
                            namespace App\Repository;
                            
                            use App\Entity\UserRole;
                            use App\Entity\UserApp;
                            use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
                            use Doctrine\Common\Persistence\ManagerRegistry;
                            
                            /**
                             * @method UserRole|null find($id, $lockMode = null, $lockVersion = null)
                             * @method UserRole|null findOneBy(array $criteria, array $orderBy = null)
                             * @method UserRole[]    findAll()
                             * @method UserRole[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
                             */
                            class UserRoleRepository extends ServiceEntityRepository
                            {
                                public function __construct(ManagerRegistry $registry)
                                {
                                    parent::__construct($registry, UserRole::class);
                                }
                            
                                public function getUserRole(UserApp $user)
                                {
                                    return $this->find(1); // j'ai mis 1 en dur pour des raisons de Debug
                                }
                            
                                // /**
                                //  * @return UserRole[] Returns an array of UserRole objects
                                //  */
                                /*
                                public function findByExampleField($value)
                                {
                                    return $this->createQueryBuilder('u')
                                        ->andWhere('u.exampleField = :val')
                                        ->setParameter('val', $value)
                                        ->orderBy('u.id', 'ASC')
                                        ->setMaxResults(10)
                                        ->getQuery()
                                        ->getResult()
                                    ;
                                }
                                */
                            
                                /*
                                public function findOneBySomeField($value): ?UserRole
                                {
                                    return $this->createQueryBuilder('u')
                                        ->andWhere('u.exampleField = :val')
                                        ->setParameter('val', $value)
                                        ->getQuery()
                                        ->getOneOrNullResult()
                                    ;
                                }
                                */
                            }
                            

                            Merci par avance pour votre aide



                            -
                            Edité par bricepote 7 décembre 2019 à 21:10:42

                            • Partager sur Facebook
                            • Partager sur Twitter
                              8 janvier 2020 à 10:14:59

                              Bonjour, je suis actuellement le cours de POO en PHP, notamment je suis à la partie où l'on nous guide pour concevoir le petit framework OCFram (https://openclassrooms.com/en/courses/1665806-programmez-en-oriente-objet-en-php/1668270-description-de-lapplication).

                              Je suis bloqué lorsque je finit le premier controleur du Frontend, car je devrais juste avoir une page vide (pas encore des News dans la base), et moi je vois des erreurs diverses

                              De suite la page bootstrap une fois que je l'ai chargée

                              Quelqu'un a eu le meme souci? Si oui, comment l'avez-vous résolu?

                              Merci d'avance pour toute réponse!

                              -
                              Edité par MarcoBolloli 8 janvier 2020 à 11:05:16

                              • Partager sur Facebook
                              • Partager sur Twitter
                                8 janvier 2020 à 17:28:25

                                Bon moi perso, je pense que nous montrer ton code et précisément aux lignes indiquées, sa aurai été mieux non? Pour qu'on puisse bien t'aider.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  9 janvier 2020 à 10:59:41

                                  Bonjour ZONEDECODE,

                                  Tu as peut-etre raison, je ne voulais pas tasser la messagerie avec un message super long. Mon arborescence est la meme que celle du prof, car je prends ses corrections ( donc là je suis à http://www.victorthuillier.com/oc/poo/tp_app/?f=Partie+III%2FChapitre+3).

                                  Je suis arrivé à resoudre les erreurs, il s'agissait de :

                                  1) problème tout bete de format de la ressource (pour le fichier routes.xml qui était pas trouvé);

                                  2) finalement j'avais oublié (?!)  une ligne de code dans la classe Page qui definissait la variable user à passer à la vue.

                                  Par contre, je me rends compte que mon Wamp est toujours mal configuré, car ma racine n'est pas "/", mais "/<nomduprojet>/Web/"...j'ai pourtant suivi les indications du prof pour la redirection, et j'ai rajouté à mon fichier httpd.conf ces lignes:

                                  <VirtualHost 127.0.0.1>
                                    ServerAdmin webmaster@localhost
                                    
                                    # Mettez ici le nom de domaine que vous avez utilisé dans le fichier hosts.
                                    ServerName monsupersite
                                    
                                    # Mettez ici le chemin vers lequel doit pointer le domaine.
                                    # Je suis sous Linux. Si vous êtes sous Windows, le chemin sera de la forme C:\Wamp\www\monsupersite\Web
                                    DocumentRoot C:\wamp64\www\POO_class_TP3_OCFram\Web
                                    <Directory C:\wamp64\www\POO_class_TP3_OCFram\Web>
                                      Options Indexes FollowSymLinks MultiViews
                                      
                                      # Cette directive permet d'activer les .htaccess.
                                      AllowOverride All
                                      
                                      # Si le serveur est accessible via l'Internet mais que vous n'en faites qu'une utilisation personnelle
                                      # pensez à interdire l'accès à tout le monde
                                      # sauf au localhost, sinon vous ne pourrez pas y accéder !
                                      Allow from all
                                    </Directory>
                                  </VirtualHost>


                                  Je comprends pas ce que fais mal...as-tu des pistes à mes donner?

                                  Merci!

                                  -
                                  Edité par MarcoBolloli 9 janvier 2020 à 11:39:30

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    10 janvier 2020 à 11:27:25

                                    Je remarque que tu est sur un serveur en ligne. Mais tu me parle toujours de wamp en local. Je comprend plus. Finalement tu travail en ligne ou en local?
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      23 janvier 2020 à 12:37:15

                                      Salut à tous ! Moi c'est MGM777, j'ai une préoccupation avec la partie 3 de ce cours; précisément avec les l'application frontend lors de l'instanciation de la classe frontendApplication dans  "Web/frontend.php" l'erreur ci-dessous a été généré. Juste avant la classe j'ai juste inclus l'autoload.php

                                      :'(:'(:'(jesus

                                      Voici le code de "Library/autoload.php" 

                                      <?php
                                          function ajoutClasse($classe)
                                           {
                                               include_once "../".str_replace("\\","/",$classe).".class.php";
                                           }
                                           spl_autoload_register("ajoutClasse");
                                      ?>
                                      Voici le code de "Web/frontend.php"
                                      <?php
                                          include_once "../Library/autoload.php";
                                          $frontend= new Application\Frontend\FrontendApplication();
                                          $frontend->run();
                                      ?>
                                      Voici le code de "frontendApplication.php"
                                      <?php
                                      namespace Application\Frontend;
                                      class FrontendApplication extends \Library\Application
                                      {
                                         //Les  attributs 
                                            // protected $;
                                      
                                         //Les constructeurs et destructeurs
                                         public function __Construct()
                                         {
                                            parent::__Construct();
                                            $this->name='Frontend';
                                         }
                                         //Les getters et les setters
                                      
                                           // public function (){}
                                         //Les methodes d'instance
                                            // public function (){}
                                         public function run()
                                         {
                                            $controller=$this->getController();  //On recupère le controler du module.
                                            $controller->execute();//On execute l'action
                                      
                                            $this->httpReponse->setPage($controller->page());//On assigne une page a la reponse
                                            $this->httpReponse->send();//On envoie la reponse  a l'utilisateur
                                      
                                      
                                         }
                                      
                                      }
                                      ?>
                                      Voila ce sont les fichiers concerné je pense par l'erreur. Merci d'avance Pour toutes les réactions.:honte::honte:
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        24 janvier 2020 à 16:05:19

                                        https://stackoverflow.com/questions/21433086/fatal-error-namespace-declaration-statement-has-to-be-the-very-first-statement

                                        https://openclassrooms.com/forum/sujet/symfony2-namespace-declaration-statement-has-to-be-99612

                                        @GeorgesMaximeMbassegue par contre dans ton dernier files, mettre autant de commentaire est inutile, ex la L22 on sais que c'est ca exécute tes pas obligé de réécrire la même choses en 'FR'

                                        -
                                        Edité par FrançoisSchmitt1 24 janvier 2020 à 16:08:42

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          9 février 2020 à 3:26:56

                                          @FrançoisSchmitt1 Super, sa fonctionne, Merci! Par contre j'ai pas compris cette façon de passer des variables dans L’URL une explication ne serait pas de refus.

                                          <?php
                                          /*
                                          En géneral on fait :
                                          */
                                          ?>
                                          <a href="news.php?id=777&amp;second_var=etc">Le lien</a>
                                          <?php
                                          /*
                                          Mais ici je suis perdu :
                                          */
                                          ?>
                                          <a href="news.php-id-second-var">Le lien</a>



                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            11 février 2020 à 14:11:43

                                            MarcoBolloli a écrit:

                                            Bonjour ZONEDECODE,

                                            Tu as peut-etre raison, je ne voulais pas tasser la messagerie avec un message super long. Mon arborescence est la meme que celle du prof, car je prends ses corrections ( donc là je suis à http://www.victorthuillier.com/oc/poo/tp_app/?f=Partie+III%2FChapitre+3).

                                            Je suis arrivé à resoudre les erreurs, il s'agissait de :

                                            1) problème tout bete de format de la ressource (pour le fichier routes.xml qui était pas trouvé);

                                            2) finalement j'avais oublié (?!)  une ligne de code dans la classe Page qui definissait la variable user à passer à la vue.

                                            Par contre, je me rends compte que mon Wamp est toujours mal configuré, car ma racine n'est pas "/", mais "/<nomduprojet>/Web/"...j'ai pourtant suivi les indications du prof pour la redirection, et j'ai rajouté à mon fichier httpd.conf ces lignes:

                                            <VirtualHost 127.0.0.1>
                                              ServerAdmin webmaster@localhost
                                              
                                              # Mettez ici le nom de domaine que vous avez utilisé dans le fichier hosts.
                                              ServerName monsupersite
                                              
                                              # Mettez ici le chemin vers lequel doit pointer le domaine.
                                              # Je suis sous Linux. Si vous êtes sous Windows, le chemin sera de la forme C:\Wamp\www\monsupersite\Web
                                              DocumentRoot C:\wamp64\www\POO_class_TP3_OCFram\Web
                                              <Directory C:\wamp64\www\POO_class_TP3_OCFram\Web>
                                                Options Indexes FollowSymLinks MultiViews
                                                
                                                # Cette directive permet d'activer les .htaccess.
                                                AllowOverride All
                                                
                                                # Si le serveur est accessible via l'Internet mais que vous n'en faites qu'une utilisation personnelle
                                                # pensez à interdire l'accès à tout le monde
                                                # sauf au localhost, sinon vous ne pourrez pas y accéder !
                                                Allow from all
                                              </Directory>
                                            </VirtualHost>


                                            Je comprends pas ce que fais mal...as-tu des pistes à mes donner?

                                            Merci!

                                            -
                                            Edité par MarcoBolloli 9 janvier 2020 à 11:39:30

                                            Salut Marco, je suis dans la même situation que toi, as-tu trouvé une solution j'y suis depuis 2 jours, bref 

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              12 février 2020 à 13:33:38

                                              @GeorgesMaximeMbassegue

                                              MGM777 a écrit:

                                              @FrançoisSchmitt1 Super, sa fonctionne, Merci! Par contre j'ai pas compris cette façon de passer des variables dans L’URL une explication ne serait pas de refus.

                                              <?php
                                              /*
                                              En géneral on fait :
                                              */
                                              ?>
                                              <a href="news.php?id=777&amp;second_var=etc">Le lien</a>
                                              <?php
                                              /*
                                              Mais ici je suis perdu :
                                              */
                                              ?>
                                              <a href="news.php-id-second-var">Le lien</a>

                                              Salut,

                                              un exemple assez concret, tu as un formulaire de connexion.

                                              avec ton premier lien, peu importe quel utilisateur va ce connecté, aura le lien, http://login?id=777

                                              cependant si tu utilise une url avec une variable $id=? doit changé.

                                              L'utilisateur avec L'ID 15 va ce connecté, le lien sera http://login?id=15

                                              L'utilisateur avec L'ID 3200 va ce connecté, le lien sera http://login?id=3200

                                              Tu le verra / comprendra mieux quand tu utilisera " Postman " pour faire des requêtes vers une API, ca sera par exemple: 

                                              http://netflix/serie?id=77&?genre=romantique 

                                              qui lui va chercher le genre de série qui est romantique, mais qui est l'ID 77 et te transmettre toute donnée que tu aura besoin (nom, date, genre, durée, saisons .... etc)





                                              -
                                              Edité par FrançoisSchmitt1 12 février 2020 à 13:34:01

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                20 février 2020 à 3:56:52

                                                Déjà je salut cette volonté d'aider !:) Mais j'ai comme l'impression qu'on s'est pas compris . Alors je vais reprendre, ma préoccupation est la suivante :  Comment avec cette nouvelle façon de transmettre des variables dans l’URL ont parvient a récupérer les données dans la variables $_GET["nameIndex"] ?

                                                <?php
                                                 news.php?firstVar=77&amp;secondVar=7
                                                //La normale je doit simplement doit recupérer les données
                                                    $1=$_GET["firstVar";        $v2=$_GET["secondVar;
                                                /*
                                                Cependant je comprends pas la nouvelle façon de faire, comment récupérer les données et surtout comment c'est possible d'écrire sa sans toute fois que le protocole HTTP ne renvoie une erreur
                                                */
                                                news.php-firstVar-secondVar
                                                ?>

                                                De plus j'ais vus nul par dans le cours une explication qui explique cette façon de programmer, je suis vraiment <<perdus>>!

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  11 mars 2020 à 3:23:51

                                                  Salut,

                                                  Y a rien a comprendre, de la meme facon qu'un $_POST[''] recupere les infos envoye par methode POST, un $_GET[''] recupere les info passer dans l'url.

                                                  le format est le suivant

                                                  --url--?key=value
                                                  var_dump($_GET['key']) //affiche: value
                                                  
                                                  --url--?key1=value1&key2=value2&key3=value3
                                                  var_dump($_GET['key1']) //affiche: value1
                                                  var_dump($_GET['key2']) //affiche: value2
                                                  var_dump($_GET['key3']) //affiche: value3



                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    13 mars 2020 à 4:17:47

                                                    Salut @djedjethai, ce que j'essaye de vous faire comprendre en faite c'est que dans la partie 3 du cours il y'a la a création de tout un nouveau system de des requette HTTP ; a travers les classe HTTP_REQUEST, HTTP_RESPONSE ceux qui est complètement différent de la manière classique de passe  les variables par url.

                                                    //transmission classique de source.php a traitement.php
                                                    //source.php
                                                    <a href=traitement.php?variable=contenu;&var2=cont>vers traitetement.</a>
                                                    
                                                    //traitement.php
                                                    //dans url du navigateur on a :http:traitement.php?variable=contenu;&ampvar2=cont
                                                    
                                                    //et ont peut faire ici 
                                                    ECHO $_GET['variable'].''.$_GET['var2'];
                                                    
                                                    
                                                    
                                                    //Maintenant avec le system !!!!! D'une requette source.php vers traitement.php
                                                    // le system genere l'url la requette source
                                                     href=traitement.php?variable=contenu-var2 vers il y'as plus de lien 'physique'
                                                    //traitement.php
                                                    //dans url du navigateur on a :http://traitement.php?variable-var2
                                                    
                                                    //et ont peut toujours faire ici 
                                                    ECHO $_GET['variable'].''.$_GET['var2'];
                                                    
                                                    //Avec le systeme les fichiers source.php et traitement.php n'existe pas.

                                                    c'est un casse tete chinois , ceux que je souhaite comprendre en realite comment mon code interpete la dernier url (http:traitement.php?variable-var2) et ce n'est pas bien expliquer dans le cours Merci d'avance !!!!!!



                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      14 mars 2020 à 13:16:37

                                                      Dans la class HTTPRequest.php, il y a la methode 

                                                      public function getData($key)
                                                      	{
                                                      		return isset($_GET[$key]) ? $_GET[$key] : null;
                                                      	}

                                                      cette derniere revient exaxtement au meme que ce que j'ai ecrit dans le dernier message: elle renvoie la valeur passer dans l'url

                                                      cette class est implemente des le depart dans le constructeur de la class Application.php

                                                      public function __construct()
                                                      	{
                                                      
                                                      		$this->httpRequest = new HTTPRequest($this);
                                                      		$this->httpResponse = new HTTPResponse($this);
                                                      		$this->name = '';
                                                      		$this->user = new User;
                                                      		$this->config = new Config($this);
                                                      		$this->cache = new CacheEngine($this);
                                                      	}

                                                      class qui est injectee dans ApplicationComponent.php

                                                      public function __construct(Application $app)
                                                      	{
                                                      		$this->app = $app;
                                                      	}

                                                      qui elle meme est herite par BackController.php

                                                      abstract class BackController Extends ApplicationComponent
                                                      {
                                                      	protected $action = '';
                                                      	protected $module = '';
                                                      	protected $page;
                                                      	protected.......

                                                      et tous les controller (ici y a que 2, la class NewsController.php du app/frontend et celle du app/backend)heritent du BackController.php, du coup on acces a cette HTTPRequest.php

                                                      class NewsController extends BackController
                                                      {
                                                        

                                                      Dans ces fameux controller, on retrouve parfois une ligne de code tel que (ici du NewsController.php app/frontEnd)

                                                      public function executeShow(HTTPRequest $request)
                                                        {
                                                          $news = $this->managers->getManagerOf('News')->getUnique($request->getData('id'));
                                                      
                                                         .........

                                                      cette ligne de code revient a faire (donc revient a mon precedent message)

                                                      $news = $_GET['id']






                                                      herite par la class BackController.php (via )

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        15 mars 2020 à 1:08:27

                                                        @djedjethai Merci pour cette brillante explication qui aide a mieux comprendre cependant il reste quelques interrogation

                                                        notamment cette façon de passe des variables dans l’URL : Quand ont veux passe des variables dans l’URL de manière classique après le ? toutes variables sont séparer par &amp; chaque est suivie par sa valeur

                                                        //dans source.php ont a un lien vers traitement.php, les parametre sont transmit de manniere classique dans l'url.
                                                        <a href='traitement.php?var1=7&amp;var2=77'></a> 
                                                        //Donc naturellement ont récupère ici dans traitement.php 
                                                        
                                                        echo $_GET['var1'];echo $_GET['var2'];
                                                        //La ya pas de soucis ont peut le comprendre

                                                        Cependant dans la partie trois du cours la forme de l'URL a changer ont transmet plus l'index suivie de la valeur mais directement les valeur et séparer par des tiret (valeurs-valeurs2). exemple fichier index.php et show.php (dans frontend/modules/) .

                                                        //dans show.php et index.php ont a un lien vers traitement.php, les paramètre sont transmit de maniere classique dans l'url.
                                                        <a href='news-7-77.html'>vers</a> 
                                                        //Mais ici ont une forme d'url différente que dans traitement.php mais on accède de la même façon aux valeurs d'ou mon interrogation 
                                                        
                                                        echo $_GET['var1'];echo $_GET['var2'];
                                                        

                                                        Il faudrait une fonction particulière dans HTTPRequest ou  HTTPResponse pour traiter cela non !

                                                        Existe t'il un mécanisme qui rend cela possible ? Merci !!!



                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          15 mars 2020 à 1:38:03

                                                          @MGM777: Bonjour.

                                                          On appelle ça de la réécriture d'url, qui peut être géré de différentes manières, comme par exemple, soit via un fichier .htaccess ou via un système de Router qui lui va être au niveau PHP.

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter

                                                          Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.

                                                            16 mars 2020 à 2:11:01

                                                            @lartak oui mais il n y' as  pas dans le cours de fonction qui se charge de récupérer ces paramètres. c.a.d qui assigne chaque valeur a un index, c'est de sa que je parle en faite.
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              18 mars 2020 à 11:11:39

                                                              @MGM777. Dans la version final du cours (dans le fichier show.php), cela n'apparait pas. Effectivement la question est interressante. Est ce que cela fonctionne (perso j'ai un doute...) ? Si cela ne fonctionne pas, il doit probablement s'agir d'une err.

                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              MOOC Programmez en orienté objet en PHP

                                                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                              • Editeur
                                                              • Markdown