[RESOLU] PHP Faker

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] PHP Faker

Re: [RESOLU] PHP Faker

par Ryle » 04 mars 2021, 12:07

Cool !

Content que tu ais pu solutionner le problème :)

Re: PHP Faker

par rjuan » 03 mars 2021, 17:38

TadaaaM !
-envoiPapier: false
  -qualite: "professeur"
  -password: "$argon2id$v=19$m=65536,t=4,p=1$hoYn9u2ColcNwakAoQUUrw$iB57aAxrXvtT2O6TArPYoCXATBvyvS3nU3OT3UVolxk"

Re: PHP Faker

par rjuan » 03 mars 2021, 17:36

Merci encore Ryle !
Comme quoi, ce qui est en face de nous peut-être invisible !!

Re: PHP Faker

par rjuan » 03 mars 2021, 17:35

çà y est j'est vu la bestiole : setQualite(?bool $qualite) !!! Le hic est dans a fonction !

Re: PHP Faker

par rjuan » 03 mars 2021, 17:31

Dans l'entité Personne :
  /**
     * @ORM\Column(type="string", nullable=false)
     */
    private $qualite;
Dans la base :
Nom Type Interclassement Attributs Null Valeur par défaut
qualite varchar(255) utf8mb4_unicode_ci Non Aucun(e)

Enfin setQualite() :
   public function setQualite(?bool $qualite): self
    {
        $this->qualite = $qualite;

        return $this;
    }

Re: PHP Faker

par Ryle » 03 mars 2021, 17:23

Tout semble logique au niveau de ton code. Il faudrait donc vérifier dans ta classe Personne, que l'attribut qualite est bien de type string et pas de type bool (ou n'est pas typé selon la façon dont tu code) et t'assurer que le setQualite() ne fait effectivement rien de plus de d'affecter la valeur spécifiée sans l'altérer :)

Re: PHP Faker

par rjuan » 03 mars 2021, 15:34

Merci Ryle,
La méthode getQualite() retourne la propriété qualite de l'instance User.
La propriété est renseignée en fin d'extrait (ci-dessous) par la méthode setQualite() de User.

Voici le contexte, il s'agit de populariser une 'fake' base de données:
        for ($p = 1; $p < 50; $p++) {
            $user = new Personne;
            dump($user);

            $hash = $this->encoder->encodePassword($user, "password");
            $user->setTitre($faker->title($gender = 'male' | 'female'))
                ->setNom($faker->lastName())
                ->setPrenom($faker->firstName())
                ->setEntreeStjo($faker->numberBetween(1948, 1990))
                ->setSortieStjo($user->getEntreeStjo() + $faker->numberBetween(3, 7))
                ->setProfession($faker->jobTitle())
                ->setDateCreation($faker->dateTimeBetween('-6 months'))
                ->setDateMiseAJour($faker->dateTimeBetween('- 7 days'))
                ->setRefuseContact($faker->boolean(5))
                ->setRole("ROLE_USER")
                ->setEnvoiPapier($faker->boolean(1))
                ->setPassword($hash)
                ->setAdresse1($faker->streetAddress())
                ->setAdresse2($faker->secondaryAddress())
                ->setCodePostal($faker->postcode())
                ->setVille($faker->city())
                ->setPays($faker->country());
            $qualite = $faker->randomElement(['ancien', 'contact', 'professeur']);
            dump($qualite);

            $user->setQualite($qualite);
            dd($user);
Après l'instruction $user= new User, en début de script, un dump montre la propriété "qualite" : NULL (bien sûr l'objet est "neuf").
A la fin du script, le dump de "qualite" affiche bien une chaîne de caractères résultante de la commande randomElement (ex. professeur).
J'exécute ensuite la fonction setQualite de user pour lui attribuer la qualite obtenue (string).
Problème: le dump de user montre : qualite=true (cf. ci-dessous).
En base de données : 1
-avatarPersonne: null
  -envoiPapier: false
  -qualite: true

Re: PHP Faker

par Ryle » 03 mars 2021, 13:15

Salutations !

Que fait la méthode getQualite() ? qu'elle retourne simplement l'attribut qualite de ton instance user ?
Si tel est le cas, à quel moment cet attribut est-il renseigné pour l'instance $user ?

$qualite est différent de $this->qualite, dans le premier cas c'est une variable, dans le second c'est un attribut de ta classe :)

PHP Faker

par rjuan » 01 mars 2021, 13:52

Bonjour,
J'utilise phpFaker avec le framework Symfony 5 et je tombe sur un 'os':
Dans un fichier AppFixtures.php, je demande à faker de choisir parmi trois items : 'ancien', 'professeur' et 'contact' avec la commande :
$qualite = $faker->randomElement(['ancien', 'contact', 'professeur']);
Si je demande un dump() de la $qualite, j'obtiens :
^ "ancien"
soit une réponse cohérente.

Et si je demande :
$user->getQualite()
J'obtiens :
^ true
Dans tous les cas, sur ma base de données la commande rend la valeur true soit = 1.

Quelqu'un pourrait-il m'éclairer ?