Bonjour,
J'ai un problème de compréhension quant à la logique de Symfony2.
Je tente un site avec 2 pages. J'ai un traitement de BDD commun dans chacune de ces pages.
J'ai donc créé un service afin de ne pas dupliquer ce traitement.
Il s'agit donc d'utiliser Doctrine dans un service et non dans un "controller".
Dans ce service, je vérifie l'existence de l'individu dans mon fichier. S'il existe je récupère un compteur et je luis ajoute 1. S'il n'existe pas, je le crée avec le compteur à 1.
Traitement simple en soi.
D'après les différents tutoriels que j'ai lu, il semblerait que Doctrine sache créer mais qu'il faille utiliser Repository pour extraire l'enregistrement.
J'ai donc mis ma requête de lecture (select) dans fichierRepository. Cela semble fonctionner.
J'ai mis ma requête d'ajout dans mon service et non dans le Repository puisque c'est Doctrine qui crée.
Déjà là, je ne sais pas si c'est correcte ou si je suis en train de me compliquer l'existence ?
Là ou cela se gâte c'est dans les appels:
dans Resources/config/services.yml je passe l'argument "Doctrine"
dans mon service
Ensuite j'appelle ma requête de lecture
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 public function __construct($em){ $this->em=$em->getManager();
Il semblerait que cette requête s'exécute.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $repository = $this->em->getRepository('claudeTestBundle:visiteurs'); $retour_count = $repository->nbrvisit($visiteur, $page);
Je dois maintenant appeler ma requête d'ajout si $retour_count < 1
cette requête est intégrée dans mon service et non dans le Repository comme la précédente.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 if ($retour_count < 1) { $ajout = $this->ajvisit($visiteur, $page, $provenance, $time); }
Quelque soit ce que je mets comme chemin, soit il ne trouve pas la classe visiteurs soit il m'indique une mauvaise méthode pour Doctrine !!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 private function ajvisit($visiteur, $page, $prov, $time) { $visit = $this->em->getRepository('claudeTeletravailBundle:visiteurs'); $visit = new visiteurs(); $visit->setip($visiteur); $visit->setcompteur(1); $em->persist($visit); $em->flush(); }
J'ai essayé : $em = $this->getDoctrine()->getManager();
$this->em=$em->getManager();
$this->em->getRepository('claudeTeletravailBundle:visiteurs'); pour lui donner le chemin de mon entité
Si quelqu'un pouvait m'expliquer ce qui pêche dans ma logique, je lui en serais reconnaissant.
merci d'avance
Partager