В 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";
}
}
(Код здесь только для того, чтобы воспроизвести проблему. Получение предупреждения или уведомления — мой сценарий.)
Причина, по которой программа закрывается, заключается в том, что Symfony выдает предупреждение об исключении, и ничто в вашем коде не перехватывает его. Вы можете предотвратить это поведение, добавив параметр командной строки --no-debug
когда вы вызываете свою команду.
К сожалению, нет способа отловить эти ошибки, поскольку они не являются исключениями.
Однако, поскольку они являются ошибками, первое, что вы должны сделать, это попытаться исправить эти ошибки.
Иногда, однако, эти ошибки происходят из кода, который вы вызываете из сторонних библиотек, что вы не можете повлиять. В этом случае вы можете просто добавить префикс вызова функции, который вызывает ошибку, с помощью «@». Это будет подавлять эти сообщения.
В качестве альтернативы, вы можете проверить параметры error_reporting и display_error вашего php.ini в cli:
http://php.net/manual/en/errorfunc.configuration.php#ini.display-errors
http://php.net/manual/en/errorfunc.configuration.php#ini.error-reporting
Надеюсь это поможет.