IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Requête doctrine s'exécutant 4 fois dans un listener [2.x]


Sujet :

Symfony PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Transports

    Informations forums :
    Inscription : Août 2014
    Messages : 5
    Points : 6
    Points
    6
    Par défaut Requête doctrine s'exécutant 4 fois dans un listener
    Bonjour à tous,

    Cela fait très longtemps que j'explore ce site que je trouve vraiment pas mal, mais je ne m'étais jamais inscrit, car jamais l'occasion de le faire.

    Je me permet de venir à vous pour un problème un peu particulier, et malgré mes recherches sur la toile, je n'ai rien trouvé de concluant. J'explique ce que je compte faire et mon problème.

    Pour mon site en symfony 2.5, j'ai décidé de mettre en place un mode Maintenance relié à la base de données, qui me permettrais de mettre en site en maintenance depuis l'administration.
    La mise en place de ce listener fonctionne très bien, je fais bien appel au service dans le config.yml comme vous voyez ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    services:
        dcl.listener.maintenance:
            class: DCL\ParametersBundle\Listener\MaintenanceListener
            arguments: ["@service_container"]
            tags:
                - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
    Mais quand je vais sur la page d'accueil du site depuis l'environnement de dev, la toolbar m'indique que 4 requêtes ont été effectué. Quand je me dirige sur le profiler, voici ce que je vois :

    Nom : prob_request.PNG
Affichages : 151
Taille : 28,4 Ko

    La requête comme vous le voyez s'exécute 4 fois ! Alors que je ne la demande qu'une fois. Si on va sur une autre page que l'accueil, la requête est bien exécuté qu'une seule fois. Bien évidemment, cela ne représente que 2ms niveau requête pour l'ensemble, mais si on multiplie par le nombre de requête que je vais devoir mettre, on arrivera à tes temps de chargement assez long, surtout quand le site sera beaucoup fréquenté.

    J'aurais donc besoin de vos conseils, et de voir quel est l'origine de cette quadruple exécution.

    Au besoin, voici la classe MaintenanceListener si cela vous intéresse.

    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
    class MaintenanceListener
    {
        private $container;
     
        public function __construct(ContainerInterface $container)
        {
            $this->container = $container;
        }
     
        public function onKernelRequest(GetResponseEvent $event)
        {
    		$doctrine = $this->container->get('doctrine')
    						->getManager()
    						->getRepository('DCLParametersBundle:Parameters')
    						->findOneByName('maintenance_mode');
    		$maintenance = $doctrine->getValue();
     
    		$debug = in_array($this->container->get('kernel')->getEnvironment(), array('test', 'dev'));
     
    		if ($maintenance && !$debug) {
                $engine = $this->container->get('templating');
                $content = $engine->render('::maintenance.html.twig');
    			$event->setResponse(new Response($content, 503));
                $event->stopPropagation();
            }
     
        }
    }
    Je vous remercie par avance de votre aide et de vos conseils,
    Marc

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    Bonjour

    Je suppose que tu as des tags "render" dans tes templates twig
    Un render génère un nouvel objet Request . l'événement on request est donc déclenché plusieurs fois pour une seule "vrai" requête http.

    Cela est évoquée dans la doc http://symfony.com/doc/current/cookb...checking-types

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Transports

    Informations forums :
    Inscription : Août 2014
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Bonsoir,

    En effet, c'était bien cela !
    Je me demande comment ais-je fait pour ne pas découvrir cela avant.

    Merci beaucoup à toi arnooo999 ! :-)
    Bonne soirée,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Exécuter la même requête plusieurs fois dans un job
    Par Lio75 dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 02/12/2014, 17h44
  2. Exécuter des requête SQL (avec ou sans PHP) dans javascript
    Par mir540 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/11/2009, 10h03
  3. Réponses: 38
    Dernier message: 02/11/2009, 18h20
  4. Requête SQL s'exécute deux fois
    Par brazilia28 dans le forum ASP.NET
    Réponses: 11
    Dernier message: 06/05/2008, 11h55
  5. Sous-requête excutée plusieurs fois dans une requête
    Par sheridan31 dans le forum Oracle
    Réponses: 8
    Dernier message: 03/07/2006, 16h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo