0

たとえば、次を使用します。

return User::findOrFail($id);

行が存在しない場合、$id例外が発生します。

Json 応答でこの例外を返すにはどうすればよいですか? HTML Laravel ページを返すようになりました。

次のようなものが必要です:

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

3 に答える 3

2

さまざまなタイプの例外を処理できます。この場合、その例外は ModelNotFoundException で処理できます

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

また、app/Exceptions/Handler.php にある Handler.php でさまざまな種類の例外をキャッチする別の方法があり、そこで例外をキャッチして、 render関数内で必要なものを返すことができます。

たとえば、その関数の insede の前にこれを追加できますreturn parent::render($request, $e):

if($e instanceof ModelNotFoundException)
{
    return new Response(['message' => 'We haven\'t find any data'], 204);
}
于 2016-07-19T20:06:59.443 に答える
2

ドキュメントから:

モデルが見つからない場合、例外をスローしたい場合があります。これは、ルートまたはコントローラーで特に役立ちます。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']);
于 2016-07-19T19:48:51.427 に答える
0

Handler filerenderのメソッドを調べる必要があります。ここで例外クラスをテストし、それに応じてJson形式で異なる応答を返すことができます

于 2016-07-19T19:56:10.837 に答える