我正在创建一个API来访问我的博客条目,而不是Laravel模型绑定自动返回404,我宁愿返回200,并且一些JSON的格式与我的API控制器相同
我使用下面的代码,当返回JSON响应时,在控制器中工作,但我无法在Route :: bind中使用它,而是JSON输出如下:
{"success":true,"data":{"headers":{}}}
这是app / global.php
中的代码Route::group(array('prefix' => '/api/blog'),function() {
Route::bind('blog', function($id) {
$Blog = Blog::find($id);
if (!$Blog) {
return Response::json(array('status' => false, 'message' => 'Blog not found'), 200);
}
});
Route::get('index', array('uses' => 'BlogController@index'));
Route::get('create', array('uses' => 'BlogController@create'));
Route::get('read/{blog}', array('uses' => 'BlogController@read'));
});
如果我尝试在JSON响应中返回一个空数组,它甚至会这样做:
return Response::json(array(), 200);
答案 0 :(得分:1)
经过一番思考后,我意识到我可以定义一个新的异常来抛出,然后简单地捕获该异常类型。
Route::group(array('prefix' => '/api/blog'),function() {
Route::bind('blog', function($id) {
$Blog = Blog::find($id);
if (!$Blog) {
throw new ApiException('Blog not found');
}
});
Route::get('index', array('uses' => 'BlogController@index'));
Route::get('create', array('uses' => 'BlogController@create'));
Route::get('read/{blog}', array('uses' => 'BlogController@read'));
});
class ApiException extends Exception {}
App::error(function(ApiException $ex) {
return Response::json(array('status' => false, 'message' => $ex->getMessage()));
});
答案 1 :(得分:0)
如果您真的想使用非标准REST API,那么您需要自己实现API方法,而不是使用Route :: bind。
在控制器方法中获取输入参数,手动解析Eloquent,然后发送您想要的响应。