Я создаю API с Laravel на основе Dingo 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.
Вам придется разобраться с этим самостоятельно и добавить пользовательскую ошибку, как описано Вот. findOrFail()
бросит ModelNotFoundException
так что давайте поймем это:
API::error(function (Illuminate\Database\Eloquent\ModelNotFoundException $e){
return Response::make(['error' => 'Resource not found'], 404);
});
Других решений пока нет …