Отключить устаревшее предупреждение в Symfony 2(.7)


С момента моего Symfony 2 обновления до 2.7. Я получаю много устаревших ошибок в PHPUnit и console (сообщение уже ясно).

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.

Есть идеи, как отключить их сейчас?

Author: Matteo, 2015-03-04

5 answers

У меня такая же проблема, и я решил ее аналогично приведенной ниже ссылке. Symfony объявляет, что сообщает обо всех ошибках и переопределяет то, что вы добавили в php.ini по дизайну (в противном случае он не смог бы поймать и отобразить для вас хорошие трассировки стека).

Итак, вам потребуется переопределить встроенное сообщение об ошибках Symfony2, создав функцию init() в вашем AppKernel.php и установите error_reporting так, как вам хотелось бы там, а также (возможно) некоторое обнаружение среды, чтобы убедиться, что вы этого не сделаете отображать ошибки в производстве, например:

// 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);
    }
}

Более подробная информация здесь (используйте Google Translate, если вы не читаете по-русски:) http://tokarchuk.ru/2012/12/disable-deprecated-warnings-in-symfony-2/

 16
Author: phpguru, 2015-03-04 21:46:04

Унаследованная функция ядра AppKernel::init() сама по себе обесценивается, поэтому ее изменение не является жизнеспособным долгосрочным решением.

Вы можете легко переопределить отчеты об ошибках, изменив вызов на Debug::enable(); как в приложении/консоли, так и в web/app_dev.php вот так.

Изменение

Debug::enable();

До

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

Это позволит оставить все остальные сообщения об ошибках в такте, подавляя устаревшие предупреждения. И вам вообще не нужно возиться с Ядром.

 44
Author: James Grundner, 2015-04-28 19:48:15

В моем случае я не мог скрыть устаревшее предупреждение без использования переменной среды SYMFONY_DEPRECATIONS_HELPER.

Измените свой phpunit.xml на

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

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

Затем у вас будет только одно сообщение, например "Оставшиеся уведомления об устаревании (x)", которое не считается ошибкой теста.

Надеюсь, это поможет.

 28
Author: n3k, 2016-06-14 13:28:58

Обратите внимание, что отключение предупреждений об устаревании с помощью error_reporting() или Debug::enable() не помешает их регистрации в dev.log. Чтобы отключить их регистрацию, вам нужно изменить уровень журнала в обработчике монолога на "предупреждение" (предупреждения об устаревании регистрируются как "информация" в канале "php").

В качестве альтернативы, чтобы предотвратить влияние на другие журналы, вы можете создать отдельный обработчик монолога с другим уровнем для канала "php". например,

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'
 6
Author: Dimosthenis Nikoudis, 2016-03-03 17:57:28

Ключ конфигурации twig.form был удален в новой версии Twig. Поэтому вам следует заменить ключ в вашей конфигурации.yml

 ///DEPRECATED : 

  twig:
     form:
         resources:
             - 'path_to_template_file'

 // NEW WAY : 
  twig:
     form_themes:
         - 'path_to_template_file'
 5
Author: axelvnk, 2015-06-05 08:49:36