Laravel 中的模型没有使用 Dingo 查询结果 - 如何在失败时做出 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 的代码没有什么特别的,它是一个空 class 扩展 Illuminate\Database\Eloquent\Model.

我正在使用 Laravel 4.2; Dingo 尚不支持 5。

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

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