Как предотвратить выход Symfony из всей программы при получении предупреждения или уведомления

В Symfony, когда мы запускаем команду, если есть какое-либо уведомление или предупреждение, Symfony показывает большое красное сообщение и закрывает всю программу.

Я хочу, чтобы в журнал выводилась ошибка, но я не хочу, чтобы вся программа закрывалась. Может кто-нибудь, пожалуйста, скажите мне, как этого добиться. Благодарю.

use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class NotQuitWithWarningOrNoticeCommand extends ContainerAwareCommand
{

protected function configure()
{
    $this
        ->setName('try:nored')
        ->setDescription('Avoid to show big red message')
        ->addArgument('type');
}

protected function execute(InputInterface $input, OutputInterface $output)
{
    $type = $input->getArgument('type');
    if ($type == 'warning' || !$type) {
        trigger_error("a warning", E_USER_WARNING);
    }
    if ($type == 'notice' || !$type) {
        trigger_error("a notice", E_USER_NOTICE);
    }
    echo "Hi there!\n";
}

} 

(Приведенный здесь код предназначен только для воспроизведения проблемы. Мой сценарий — получение предупреждения или уведомления.)


person user3541554    schedule 22.01.2015    source источник
comment
Используйте монолог и не вызывайте ошибок.   -  person Emii Khaos    schedule 23.01.2015
comment
но иногда функции php и сторонние библиотеки вызывают ошибки.   -  person user3541554    schedule 23.01.2015
comment
Тогда хорошо, как есть. Ошибки и предупреждения являются неправильным кодом/использованием, и вы должны их исправить.   -  person Emii Khaos    schedule 23.01.2015


Ответы (2)


Причина, по которой программа завершает работу, заключается в том, что Symfony превращает предупреждение в исключение, и ничто в вашем коде его не перехватывает. Вы можете предотвратить такое поведение, добавив параметр командной строки --no-debug при вызове своей команды.

person user2634914    schedule 23.01.2015

К сожалению, нет возможности отловить эти ошибки, так как они не являются исключениями.

Однако, поскольку они являются ошибками, вашим первым действием должна быть попытка исправить эти ошибки.

Однако иногда эти ошибки возникают из-за кода, который вы вызываете из сторонних библиотек, на который вы не можете повлиять. В этом случае вы можете просто поставить перед вызовом функции, вызывающим ошибку, префикс «@». Это подавит эти сообщения.

В качестве альтернативы вы можете проверить настройки error_reporting и display_error вашего cli php.ini:

http://php.net/manual/en/errorfunc.configuration.php#ini.display-errors http://php.net/manual/en/errorfunc.configuration.php#ini.error-reporting

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

person Christian Loock    schedule 23.01.2015