2

Dingo APIに基づいて Laravel で API を作成しています。

私のルートには、次のものがあります。

Route::api('v1', function () {
    Route::resource('object', 'My\Namespace\MyController');
});

そしてMyControllerで:

class MyController extends \Illuminate\Routing\Controller {

    use Dingo\Api\Routing\ControllerTrait;

    public function index() {
        return MyObject::all();
    }

    public function show($id) {
        return MyObject::findOrFail($id);
    }

}

これは、 が動作することを意味しapi.domain.com/objectますMyController@index。データベースに項目がないため、空の json 配列が出力されます[]

api.domain.com/object/123を呼び出しますMyController@show(123)。これはhttps://github.com/dingo/api/wiki/Responsesによるものです。ただし、データベースに結果がないため、次のようになります。

No query results for model [My\Namespace\MyObject].

代わりに、これにより適切な RESTful エラーが発生することが期待されます。それ、どうやったら出来るの?

MyObject のコードは特別なものではなく、 を拡張する空のクラスIlluminate\Database\Eloquent\Modelです。

私は Laravel 4.2 を使用しています。5 は Dingo ではまだサポートされていません。

4

1 に答える 1

3

自分で処理し、ここで説明されているようにカスタム エラーを追加する必要があります。findOrFail()をスローするModelNotFoundExceptionので、それをキャッチしましょう:

API::error(function (Illuminate\Database\Eloquent\ModelNotFoundException $e){
    return Response::make(['error' => 'Resource not found'], 404);
});
于 2015-02-21T11:39:48.547 に答える