dongtongjian3127 2017-11-17 07:27
浏览 26
已采纳

Laravel例外没有捕获

I'm trying to do a very basic exception try catch, but it doesn't catch.

 $id =0;
 try {
        $question = $this->model->find($id);  // will not find anything since $id = 0
        $question->delete(); // throw an exception
        return true;
 } catch (\Exception $e) {
        dd ('hello');  // should end up here, but no?!?!? 
 } catch (FatalThrowableError $f) {
        echo ("fatal"); // or here... but no. 
 }

but the catch doesn't "catch". I get an Fatal error in the browser saying that delete was called on a null object. But that's exactly what I was trying to do: do a delete on a null object (id = 0 is not in the DB), to test the exception.

I have tried

use Symfony\Component\Debug\Exception;
use Symfony\Component\Debug\Exception\FatalThrowableError;

or simply

Exception;
FatalThrowableError;

Also, having the \Exception $e or Exception $e (with or without ) doesn't change anything.

Note that if I add a line like $foo = 4/0 I get into the Exception section (dd (hello)).

in .env APP_DEBUG=true, APP_LOG_LEVEL=debug

I'm on Laravel 5.5 using PHP 7.0.10 on windows 7.

  • 写回答

1条回答 默认 最新

  • douxiong3245 2017-11-17 07:31
    关注

    http://php.net/manual/en/language.errors.php7.php

    As the Error hierarchy does not inherit from Exception, code that uses catch (Exception $e) { ... } blocks to handle uncaught exceptions in PHP 5 will find that these Errors are not caught by these blocks. Either a catch (Error $e) { ... } block or a set_exception_handler() handler is required.

    You can, additionally, catch (\Throwable $e) {} to account for both Error and Exception types.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部