2014-04-17 6 views
-1

J'ai lu à propos de la documentation du service symfony et j'ai compris que par défaut lors de la création d'un service, il sera créé à la portée du conteneur et ne sera construit qu'une fois (si demandé au moins une fois) .constructeur de service symfony appelé plusieurs fois

J'ai ajouté des logs dans mon constructeur de service, et j'ai remarqué que le constructeur est appelé plusieurs fois: J'actualise ma page web qui appelle une action dans mon controller. Cette action obtient mon service et l'utilise. Chaque fois que j'actualise ma page Web, le constructeur du service est appelé et connecté. J'utilise Symfony 2.1 Est-ce normal? Qu'est-ce que j'ai raté?

Merci d'avance pour vos commentaires

+0

montrez quelques codes s'il vous plaît .. –

+0

oui! montrez-nous du code: D –

+0

peut-être que vous utilisez les méthodes twig render ou render_esi qui provoquent plusieurs requêtes? – hombee

Répondre

1

Oui, il est tout à fait normal pour PHP parce que PHP est interpreted langage de programmation. Ainsi, le code PHP est interprété par un serveur web avec un module de processeur PHP chaque fois que vous demandez (par exemple lorsque vous actualisez la page) un serveur.

Vous devriez en savoir plus sur Symfony2 and HTTP Fundamentals

+0

ok, merci. Alors pourquoi la documentation de symfony dit-elle que dans un conteneur, le service est instancié une seule fois? – user3544352

+0

@ user3544352 Doc dit: 'La même instance est utilisée chaque fois que vous * le demandez à partir de ce conteneur *. 'Pas chaque requête HTTP:) Veuillez faire attention au flux d'applications Symfony2: http://symfony.com/doc/current/ book/http_fundamentals.html # le-symfony-application-flow – NHG

+0

merci. Je pense que j'ai enfin compris, et je vais relire la documentation pour la réparer :). Merci pour votre temps. – user3544352

1

Les services sont singletons, donc toujours une seule instance peuvent exister.

0

Vous appelez peut-être le service deux fois (ou plus) dans votre code. Mais comme règle générale et selon le dernier Symfony docs (3.1):

Lorsque vous demandez le service app.mailer du conteneur, le conteneur construit l'objet et le renvoie. C'est un autre avantage majeur de l'utilisation du conteneur de service. A savoir, un service n'est jamais construit jusqu'à ce qu'il soit nécessaire. Si vous définissez un service et ne l'utilisez jamais sur une demande, le service n'est jamais créé.

Questions connexes