【问题标题】:Try/catch not working with laravel 5.4尝试/捕获不适用于 laravel 5.4
【发布时间】:2017-04-10 06:27:56
【问题描述】:

我知道关于这个问题有很多答案,但没有一个对我有真正的帮助。

// update name

Route::put('/profile/update', function(Request $request){
$name = $request->input('name');

   try{
         echo DB::table('users')->where('id',Auth::id())->update(['name' => $name]);
      }
   catch(\Exception $e){
     // do task when error
      echo $e->get_message();
   }
});

我也尝试过删除方法,但这也不起作用,请您弄清楚发生了什么。 谢谢。

【问题讨论】:

  • 这是路由文件web.php吗?为什么会有});?请描述你想做什么,你尝试了什么以及问题
  • 是的,那是 web.php 文件,为什么会有 });我正在测试这种方法,这就是我使用直接函数的原因。
  • 好的。你的问题是它总是返回1 不是吗?

标签: php laravel-5 try-catch laravel-5.4


【解决方案1】:

就我而言,我必须使用\Throwable 而不是\Exception

try {
   //code 
} catch (\Throwable $e) {
     dd($e);
}

【讨论】:

  • 我在 Laravel 5.6 上也是如此
【解决方案2】:

2020 年更新

Laravel 主要使用 camelCase 命名,所以使用:

   catch(\Exception $e){
     // do task when error
      echo $e->getMessage();
   }

如果不是,那么只需转储完整的$e 即可查看:

    catch(\Exception $e){
       // do task when error
       dd($e);
    }

snake_case 命名法仅用于 Laravel 中的表名。

【讨论】:

  • 抱歉,这不是答案,而是建议
  • @Khan Shahrukh,打扰一下? :)) Dude get_message() 不用于在 Laravel 中获取错误消息。 getMessage() 是正确的方法..它将解决 OP 的问题,idk 你在说什么。在我看来,任何可以解决问题解释的问题都被称为答案 - 大声笑
  • 在我的例子中,get_message() 只是一个未定义的函数,在这里意义为 0,但我放置它只是为了测试是否正在执行 catch 但从不执行 catch 块。可能是一个 SQL 问题...
【解决方案3】:

从您的代码看来,代码永远不会遇到问题,这实际上与 laravel 无关。您的问题是 SQL 问题。

您正在尝试更新记录并且更新不存在的行在 SQL 中永远不会失败。所以我建议通过检查结果值并将 trycatch 替换为 if else

来手动处理这种情况

顺便说一句,@Learner 对 get_message() 的看法是 100% 正确的

【讨论】:

    【解决方案4】:

    echo $e->get_message();改为echo $e->getMessage();,异常类没有get_message()函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-04
      • 2018-07-19
      • 1970-01-01
      • 2017-07-13
      • 2018-03-23
      • 1970-01-01
      • 2017-08-02
      相关资源
      最近更新 更多