2015-01-22 12 views
5

W Symfony, gdy uruchomimy polecenie, jeśli pojawi się jakikolwiek komunikat lub ostrzeżenie, Symfony wyświetli dużą czerwoną wiadomość i zamknie cały program.Jak zapobiegać opuszczaniu przez Symfony całego programu w momencie otrzymania ostrzeżenia lub powiadomienia

Chcę, aby błąd został wysłany do dziennika, ale nie chcę, aby cały program został zamknięty. Czy ktoś może mi powiedzieć, jak to osiągnąć. dzięki.

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"; 
} 

} 

(kod jest tu po prostu do odtworzenia problemu. Pierwsze ostrzeżenie lub zawiadomienie jest mój scenariusz.)

+0

Użyj monologu i nie wyzwalaj błędów. –

+0

, ale czasami funkcje php i biblioteki innych producentów wywołują błędy. – user3541554

+0

To dobrze, jak to jest. Błędy i ostrzeżenia to błędny kod/użycie i powinieneś je naprawić –

Odpowiedz

0

Powodem zakończenia programu jest fakt, że Symfony promuje ostrzeżenie do wyjątku i nic w kodzie go nie przechwytuje. Możesz zapobiec temu zjawisku, dodając opcję wiersza poleceń --no-debug, gdy wywołasz swoje polecenie.

0

Niestety, nie ma sposobu, aby nadrobić te błędy, ponieważ nie ma żadnych wyjątków.

Jednak ponieważ są to błędy, pierwszą czynnością powinno być naprawienie tych błędów.

Czasami jednak błędy te pochodzą z kodu, który wywołujesz z bibliotek stron trzecich, którego nie możesz uzyskać. W takim przypadku możesz po prostu poprzedzić wywołanie funkcji, które spowoduje błąd z "@". Spowoduje to utratę tych wiadomości.

Alternativly, może chcesz sprawdzić error_reporting i display_error ustawienia php.ini Twojego CLI za:

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

nadzieję, że to pomaga.