2016-09-04 5 views
0

私は安らかなAPIを作成するためにLaravelを学んでいます。次のコードは、現在Usersテーブルと対話し、新しいテーブルを作成しています。しかし、重複した電子メールリクエストがDBにヒットした場合、(JSONエラーを返すために)捕捉されると考えられる例外はありません。代わりにLaravel例外が発生し、その代わりに「QueryException」が発生します。アプリ。次のようにコントローラでJSONを返さない疎結合制約エラーです。

メッセージは次のとおりです。

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

どのように私は最高の自分のアプリケーションでこのエラーをキャッチし、Laravelの1とは対照的に、JSONレスポンスを返すのですか?明白な何かが欠けている?

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')); 
    } 


} 
+0

use \Exception as Exception;は 'キャッチ(\例外の$ e)を試してみてください' –

+1

@ka_lin - この魔法は何ですか?これは動作します:)あなたはここで何が起こっているかについて詳しく説明できますか? – Paul

答えて

0

あなたの現在の名前空間がPHPは名前App\Http\Controllers\Api\Exception;で例外をキャッチしようとしApp\Http\Controllers\Api;

あるので、あなたは} catch (Exception $e) {

} catch (\Exception $e) {に変更してください - 明確に存在していません。

現在の名前空間を脱出し、あなたがバックスラッシュ必要があります。ネイティブの例外をキャッチするには:\Exception - これは、それが完全な修飾子名ですです。また

あなたが他のライブラリやなめらかのようなあなたのスクリプトの先頭に追加することができます...

関連する問題