使用 Dingo 的 Laravel 中的模型没有查询结果 - 如何在失败时做出 RESTful 响应


No query results for model in Laravel with Dingo - how to make a RESTful response on failure?

我正在基于 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; Dingo还不支持5。

您必须自己处理它并添加自定义错误,如此处所述。 findOrFail()会抛出一个ModelNotFoundException所以让我们抓住它:

API::error(function (Illuminate'Database'Eloquent'ModelNotFoundException $e){
    return Response::make(['error' => 'Resource not found'], 404);
});