Larval Integrity约束错误未在控制器中返回JSON。

时间:2016-09-04 18:52:24

标签: php json laravel-5 jwt

我正在学习Laravel创建一个宁静的API。以下代码当前正在与Users表通信并在其中创建新记录。但是,当重复的电子邮件请求到达数据库时,我认为会捕获的异常(返回JSON错误)不是,而且我得到一个Laravel异常,而这似乎是一个' QueryException'在应用程序中更深层次。

信息如下:

QueryException in Connection.php line 761:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'email' in ....

如何在我的应用程序中最好地捕获此错误并返回Json响应而不是Laravel响应?我错过了一些明显的东西吗

namespace App\Http\Controllers\Api;

use Illuminate\Http\Request;
use App\User as User;
use JWTAuth;
use Response;
use App\Http\Controllers\Controller;

class LoginController extends Controller
{
  public function __construct(Request $request){
        $this->request = $request;
  }

  public function signup()
  {
    $email = $this->request->input('email');
    $password = $this->request->input('password');
    $credentials['email'] = $email;
    $credentials['password'] = $password;
    $credentials['name'] = 'Name';

    try {
         $user = User::create($credentials);
    } catch (Exception $e) {
        return Response::json(['error' => 'User already exists.'], HttpResponse::HTTP_CONFLICT);
    }

    $token = JWTAuth::fromUser($user);
    return Response::json(compact('token'));
  }


}

1 个答案:

答案 0 :(得分:0)

您应该将} catch (Exception $e) {更改为} catch (\Exception $e) {

由于您当前的命名空间为App\Http\Controllers\Api;

PHP尝试使用名称App\Http\Controllers\Api\Exception;来捕获异常 - 这显然不存在。

要转义当前命名空间并捕获本机异常,您需要反斜杠\Exception - 这是它的完整限定符名称。

或者,您可以像在任何其他库或smth一样添加到脚本顶部... use \Exception as Exception;