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


Quentin Geeraert
Auteur
Réponse acceptée

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.

Salut,

essai avec ça :

dans le fichier service.yaml

services:
    Symfony\Component\DependencyInjection\ContainerInterface: '@service_container'

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.