Symfony 3 обрабатывает ошибки

Есть ли способ обработать все ошибки, например, от моих контроллеров symfony, если я получаю эту ошибку:

введите здесь описание изображения

В моем контроллере есть способ получить эту ошибку с помощью try/catch? Например:

class SomeClass extends Controller
{
    public function doSomethingAction(Request $request){
        //do something
        try {
            //do something
        }
        catch(\Exception $e){
            dump("ERROR:".$e->getMessage()); //<--this is not dumping anithing
        }
    }
}

Я всегда получаю сообщение на красном экране в предварительном просмотре сетевого вызова: введите здесь описание изображения

Вместо чего-то вроде:

"ОШИБКА: Ошибка типа: Аргумент 1 передан......


person SensacionRC    schedule 20.03.2019    source источник
comment
Вы не даете нам достаточно информации. Вы уверены, что //do something является причиной вашего исключения, а не внедрением зависимостей или ошибочным значением ParamConverter?   -  person β.εηοιτ.βε    schedule 20.03.2019


Ответы (1)


С PHP 7 вы можете обрабатывать ошибки PHP, такие как TypeErrors, из-за несоответствия типов (как в вашем примере), а также исключения, перехватывая их общий интерфейс Throwable.

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

Таким образом, вы можете поймать ошибки вместе с исключением, например:

try {
    ...
} catch (\Throwable $error) {
    ...
}
person dbrumann    schedule 20.03.2019
comment
Это то, что я сначала удивился. Но FatalThrowableError расширяет FatalErrorException, который расширяет \ErrorException в Symfony. И \ErrorException действительно является исключением, а не \Error, поэтому должен работать OP catch. - person β.εηοιτ.βε; 20.03.2019
comment
FatalThrowableError используется Symfony DebugHandler для переноса ошибок php, например. для единообразной обработки ошибок и исключений внутри прослушивателя исключений. Внутри формы это должно быть обычное \TypeError, что означает, что это \Throwable. См. github.com/symfony/debug/blob/master/ErrorHandler.php #L645 (сам метод используется внутри register() для \register_shutdown_function()) - person dbrumann; 20.03.2019
comment
Верно, меня одурачил тот факт, что мы видим только начало трассировки стека - person β.εηοιτ.βε; 20.03.2019
comment
Может быть, стоит порекомендовать ловить \TypeError, а не \Throwable, чтобы сузить его и не ловить все, как вы прекрасно указали. - person β.εηοιτ.βε; 20.03.2019
comment
Да, это тоже сработает, и в большинстве случаев я бы предложил сделать это, чтобы предотвратить проблемы, то есть неосознанно подавлять ошибки, о которых я упоминал в своем ответе. Я просто понял, что вопрос в том, как поймать как можно шире, поэтому вместо этого я использовал Throwable. - person dbrumann; 20.03.2019
comment
Идеально, это то, что я хотел. Дело в том, что в некоторых местах я хочу отловить возможные ошибки, ошибка в приведенном мной примере вынуждена мной протестировать оператор try catch. Спасибо за помощь - person SensacionRC; 21.03.2019