Bonjour à tous,
Je suis actuellement en stage.
Dans mon application Symfony j'utilise FOSUser pour gérer les utilisateurs, à l'inscription de l'utilisateur j'ai ajouté un champ que je nomme "Code Client".
L'utilisateur remplit ce champ s'il a déjà un compte chez nous.
Quand on soumet le formulaire d'inscription, je veux pouvoir faire une requête dans une autre base de données qui me permet de comparer si l'adresse mail qu'il a saisit ainsi que le code client existent et correspondent dans notre base de données CRM avant de push l'entité User vers la base qui gère l'application.
Pour cela, j'ai créé un callback dans mon Entité User
En fait je souhaiterais pouvoir effectuer une requête, sauf que je ne peux pas appeler l'entity manager depuis ma class User car $this correspond à une instance de ma classe User et que ma class étend déjà BaseUser donc je ne peux pas étendre Controller.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 <?php // src/AppBundle/Entity/User.php namespace UserBundle\Entity; use FOS\UserBundle\Model\User as BaseUser; use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Validator\Constraints as Assert; use Symfony\Component\Validator\Context\ExecutionContextInterface; /** * @ORM\Entity * @ORM\Table(name="fos_user") */ class User extends BaseUser { /** * @Assert\Callback */ public function validate(ExecutionContextInterface $context) { $email = $this->getEmail(); $sql = "SELECT comp_codecomptable FROM vEntityPhoneEmailPerson WHERE Pers_EmailAddress=:mail"; $em = $this>getDoctrine()->getEntityManager('crm'); $connection = $em->getConnection(); $statement = $connection->prepare($sql); $statement->bindValue(':mail', $mail); $statement->execute(); $tabResult = $statement->fetchAll(PDO::FETCH_OBJ); dump($tabResult); $userCodeClient = $this->getUserCodeClient(); if ($email != $userCodeClient) { $context->buildViolation("Votre code client ne correspond pas au mail référencé dans notre base de données, veuillez laisser le champ vide si vous n'avez pas de compte client") ->atPath('userCodeClient') ->addViolation(); } } /** * @var string * * @ORM\Column(name="userCodeClient", type="string", length=255, nullable=true) * */ private $userCodeClient; }
Pour ce qui est du test bidon qui consiste à comparer le mail au code client, s'était juste pour tester que ma validation est fonctionnel et que ça m'affiche bien un message d'erreur près de mon formulaire quand on veut le valider.
Mes questions:
1) Est-ce qu'utiliser un Callback est la bonne solution ?
1.1) Si non, qu'est ce que vous me conseillez de faire ?
2) Comment décomposer mon problème pour pouvoir exécuter une requête ?
(Sachant que la requête que je souhaite faire n'est liée à aucune entité présente dans mon application, je veux juste checker une information dans une vue de mon autre base et si c'est okay je valide l'inscription du nouvel utilisateur).
Si vous souhaitez de plus ample informations n'hésitez pas et merci de prendre le temps de me répondre.
Partager