Container de service - Symfony 5.2

Par Quentin Geeraert, il y a 5 ans


Bonjour,

Voila je rencontre un petit problème avec mon code, j'ai récemment upgrader mon site vers la version 5.2 de symfony cependant lors de l'éxecution de mes tests j'ai un message me disant que l'appelle depuis le container est deprecated.

Ce que je fais

private function bootKernel(string $config): ContainerInterface { $this->kernel->setConfigurationFilename(__DIR__.'/fixtures/config/'.$config); $this->kernel->boot(); $container = $this->kernel->getContainer(); $this->formFactory = $container->get('form.factory'); $this->twig = $container->get('twig'); return $container; }

J'ai également essayer de créer un service alias de twig appeller twig.alias mais j'obtient une erreur me disant que le service n'existe pas.

Ce que je veux

Ne plus avoir les messages deprecated et avoir des tests clean.

Ce que j'obtiens

Accessing the "form.factory" service directly from the container is deprecated, use dependency injection instead.
Accessing the "twig" service directly from the container is deprecated, use dependency injection instead.

3 réponses

bidule, il y a 5 ans

Salut,

essai avec ça :

dans le fichier service.yaml

services: Symfony\Component\DependencyInjection\ContainerInterface: '@service_container'
Quentin Geeraert, il y a 5 ans

Bonsoir ,

J'ai tenter en rajoutant la ligne dans service.yaml malheureusement j'ai toujours le même message :

Since symfony/framework-bundle 5.2: Accessing the "form.factory" service directly from the container is deprecated, use dependency injection instead. Since symfony/twig-bundle 5.2: Accessing the "twig" service directly from the container is deprecated, use dependency injection instead.
Quentin Geeraert, il y a 5 ans

Bonsoir, j'ai trouver une solution au problème.

Le fait d'utiliser TestCase et d'ensuite demander la configuration avec : $this->kernel->setConfigurationFilename(__DIR__.'/fixtures/config/'.$config); fait que la configuration était forcément réecrite pour les services.

En effet, voici mon ancien fichier de configuration :

framework: secret: ThisIsNotReallyASecretSoPleaseChangeIt validation: { enabled: true } test: true session: storage_id: session.storage.mock_file form: ~ twig: strict_variables: true services: karser_recaptcha3.google.recaptcha: class: Karser\Recaptcha3Bundle\Tests\fixtures\RecaptchaMock public: true

On constate que j'avais rajouter le service de captcha ici, j'ai remplacer la partie services comme ceci :

services: karser_recaptcha3.google.recaptcha: class: Karser\Recaptcha3Bundle\Tests\fixtures\RecaptchaMock public: true form.factory.alias: alias: form.factory public: true twig.alias: alias: twig public: true

et cela fonctionne désormais. Je fais donc appel aux alias qui sont public plutôt que l'accès direct qui lui est private.