web-dev-qa-db-fra.com

Désactiver l'avertissement obsolète dans Symfony 2(.7)

Depuis ma Symfony 2 Mise à jour vers 2.7. J'obtiens beaucoup d'erreurs obsolètes dans PHPUnit et console (le message est clair maintenant).

ProjectX\ApiBundle\Tests\Controller\SectionsControllerTest::testPostDebug()
The twig.form.resources configuration key is deprecated since version 2.6 and will be removed in 3.0. Use the twig.form_themes configuration key instead.

Une idée comment les désactiver pour l'instant?

29
Roel Veldhuizen

J'ai le même problème et je l'ai résolu de la même manière que le lien ci-dessous. Symfony déclare signaler toutes les erreurs et remplace ce que vous avez mis dans php.ini par conception (sinon il ne pourrait pas attraper et afficher de belles traces de pile pour vous).

Donc, vous devrez remplacer le rapport d'erreur intégré de Symfony2 en créant une fonction init() dans votre AppKernel.php et en définissant error_reporting comme vous le souhaitez , avec (probablement) une détection d'environnement pour vous assurer que vous n'affichez pas les erreurs de production, par exemple:

// Add this to app/AppKernel.php
public function init()
{
    if ($this->debug) {
        ini_set('display_errors', 1);
        error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);
    } else {
        ini_set('display_errors', 0);
    }
}

Plus de détails ici (utilisez Google Translate si vous ne lisez pas le russe :) http://tokarchuk.ru/2012/12/disable-deprecated-warnings-in-symfony-2/

16
phpguru

La fonction héritée Kernel :: init () d'AppKernel est elle-même dépréciée, donc la changer n'est pas une solution viable à long terme.

Vous pouvez facilement remplacer le rapport d'erreur en modifiant l'appel à Debug :: enable (); dans les deux app/console et web/app_dev.php comme ça.

Changement

Debug::enable();

à

Debug::enable(E_RECOVERABLE_ERROR & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED, false);

Cela laissera tous les autres rapports d'erreur intacts tout en supprimant les avertissements dépréciés. Et vous n'avez pas du tout besoin de jouer avec le noyau.

45
James Grundner

Dans mon cas, je ne pouvais pas masquer l'avertissement obsolète sans utiliser SYMFONY_DEPRECATIONS_HELPER variable d'environnement.

Change ton phpunit.xml avec

<phpunit>
    <!-- ... -->

    <php>
        <env name="SYMFONY_DEPRECATIONS_HELPER" value="weak"/>
    </php>
</phpunit>

Ensuite, vous n'aurez qu'un seul message comme "Avis de dépréciation restants (x)" qui n'est pas considéré comme un échec du test.

J'espère que cela vous aidera.

36
j-guyon

Notez que la désactivation des avertissements de dépréciation via error_reporting () ou Debug :: enable () ne les empêchera pas d'être enregistrés dans dev.log. Pour les empêcher d'être enregistrés, vous devrez changer le niveau de journalisation dans votre gestionnaire de monologues en "avertissement" (les avertissements de dépréciation sont enregistrés comme "info" dans le canal "php").

Alternativement, pour éviter que d'autres journaux ne soient affectés, vous pouvez créer un gestionnaire monolog séparé avec un niveau différent pour le canal "php" par exemple.

monolog:
    handlers:
        main:
            type:  stream
            path:  %kernel.logs_dir%/%kernel.environment%.log
            level: debug
            formatter: monolog.formatter.session_request
            channels: '!php'
        php:
            type:  stream
            path:  %kernel.logs_dir%/%kernel.environment%.log
            level: warning
            formatter: monolog.formatter.session_request
            channels: 'php'
9

La clé de configuration twig.form a été supprimée dans la nouvelle version de Twig. Par conséquent, vous devez remplacer la clé dans votre config.yml

 ///DEPRECATED : 

  twig:
     form:
         resources:
             - 'path_to_template_file'

 // NEW WAY : 
  twig:
     form_themes:
         - 'path_to_template_file'
5
axelvnk