Php 没有对带有野狗的Laravel模型的查询结果-如何对故障做出RESTful响应?
我正在使用基于的Laravel创建一个API 在我的路线中,我有:Php 没有对带有野狗的Laravel模型的查询结果-如何对故障做出RESTful响应?,php,api,rest,laravel,dingo-api,Php,Api,Rest,Laravel,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;
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)
。这是根据。但是,由于数据库中没有结果,我得到:
没有模型[My\Namespace\MyObject]的查询结果。
我希望这会产生一个很好的RESTful错误。我该怎么做?
MyObject的代码没有什么特别之处,它是一个扩展了illumb\Database\elounce\Model
的空类
我使用的是Laravel4.2;Dingo还不支持5。您必须自己处理它,并按说明添加自定义错误
findOrFail()
将抛出一个ModelNotFoundException
,我们来看看:
API::error(function (Illuminate\Database\Eloquent\ModelNotFoundException $e){
return Response::make(['error' => 'Resource not found'], 404);
});
您使用的是什么版本的Laravel?4还是5?@lukasgeiter抱歉,忘了。我正在使用Laravel4.2,因为野狗还不支持5。你在你的控制器中使用
控制器Rait
吗?@Vohuman我使用,是的,我会把它添加到我的问题中。我很高兴看到提问者反应如此之快。很好,这很有道理,谢谢。那么,把代码放在哪里最好呢?这是我自己的软件包-我应该把它放在ServiceProvider中吗?是的,在ServiceProvider中是一个完美的地方:)@CamilStaps确切地说:)那只是LaravelsResponse
facade。(illumb\Support\Facades\Response
)。但是全局名称空间中有一个别名,所以您甚至不需要导入它…啊,我明白了。。。您也只需执行\Response::make()
或使用Response代码>在顶部。或者像您现在可能做的那样使用light\Support\Facades\Response