【问题标题】:How to handle native exception in Laravel?如何在 Laravel 中处理本机异常?
【发布时间】:2016-11-22 20:38:33
【问题描述】:

例如,我使用:

return User::findOrFail($id);

$id 不存在行时,我得到异常。

如何在 Json 响应中返回此异常?它现在返回 HTML Laravel 页面。

我需要这样的东西:

{"error", "No query results for model"}

【问题讨论】:

    标签: laravel laravel-5 laravel-5.2 laravel-response laravel-exceptions


    【解决方案1】:

    来自他们的文档:

    有时,如果找不到模型,您可能希望抛出异常。这在路由或控制器中特别有用。 findOrFail 和 firstOrFail 方法将检索查询的第一个结果。但是,如果没有找到结果,则会抛出 Illuminate\Database\Eloquent\ModelNotFoundException。

    因此,您可以捕获该异常,也可以使用简单的Find 方法。如果没有找到它会返回false,所以你可以相应地处理它。

    return User::find($id);
    

    更新

    选项 1

    try {
        return User::findOrFail($id);
    } catch (\Illuminate\Database\Eloquent\ModelNotFoundException $e) {
        return json_encode(['error' => 'No query results for model']);
    }
    

    选项 2

    $user = User::find($id);
    if($user) {
        return $user;
    }
    return json_encode(['error' => 'No query results for model']);
    

    【讨论】:

    • 我知道这一点,但它返回给我不清楚的错误,包含在 HTML 代码中
    • 什么意思?它抛出一个异常,如果它没有被正确捕获,您将看到一个 HTML 页面,说明抛出了一个异常。这就是异常的工作方式。要捕获它,您需要将代码包装在 try/catch 块中。另一种方法是简单地使用 find 方法。
    • 我的意思是我需要为 API 移动返回不带 HTML 代码的消息
    【解决方案2】:

    您应该查看Handler filerender 方法。您可以在此处测试异常类,并根据它返回 Json 格式的不同响应

    【讨论】:

      【解决方案3】:

      您可以处理各种类型的异常,在这种情况下可以使用 ModelNotFoundException 处理该异常

      try{
          $user = User::findOrFail($id);
      }catch(ModelNotFoundException $e){
          return response()->json(['error' => 'User not found'], 400);
      }
      

      还有另一种方法可以在位于 app/Exceptions/Handler.php 的 Handler.php 中捕获各种类型的异常,您可以在其中捕获异常并在 render 函数中返回您想要的任何内容。

      例如,你可以在 return parent::render($request, $e): 之前添加这个函数

      if($e instanceof ModelNotFoundException)
      {
          return new Response(['message' => 'We haven\'t find any data'], 204);
      }
      

      【讨论】:

        猜你喜欢
        • 2020-04-23
        • 2023-03-19
        • 1970-01-01
        • 2015-09-15
        • 2018-11-30
        • 1970-01-01
        • 2014-04-22
        • 2013-10-22
        相关资源
        最近更新 更多