Laravel with Dingo中的模型没有查询结果 - 如何在失败时进行RESTful响应?

时间:2015-02-21 11:31:01

标签: php api rest laravel dingo-api

我正在使用基于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。

1 个答案:

答案 0 :(得分:3)

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

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