从路由模型绑定中返回Laravel 4中的JSON响应
问题描述:
我正在创建一个API来访问我的博客条目,而不是Laravel模型绑定自动返回404,我宁愿返回一个200和一些JSON与我的API控制器返回的格式相同。从路由模型绑定中返回Laravel 4中的JSON响应
我用下面的代码,它返回时,JSON响应工作控制器内,但我不能把它路由中工作::绑定,而不是JSON输出如下:
{"success":true,"data":{"headers":{}}}
这是应用程序内我的代码/ 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' => '[email protected]'));
Route::get('create', array('uses' => '[email protected]'));
Route::get('read/{blog}', array('uses' => '[email protected]'));
});
它甚至做到这一点,如果我尝试在像这样JSON响应返回一个空数组:
return Response::json(array(), 200);
答
经过一番思考,我意识到我可以定义一个新的异常来抛出,然后简单地捕获该异常类型。
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' => '[email protected]'));
Route::get('create', array('uses' => '[email protected]'));
Route::get('read/{blog}', array('uses' => '[email protected]'));
});
class ApiException extends Exception {}
App::error(function(ApiException $ex) {
return Response::json(array('status' => false, 'message' => $ex->getMessage()));
});
答
如果你真的想使用非标准的REST API,那么你需要自己实现API方法,而不是使用Route :: bind。
在您的控制器方法中获取输入参数,手动解析Eloquent,然后发送您想要的响应。
+0
谢谢,最好我会使用REST API,不幸的是我没有得到这样的奢侈,因为我提供的代码就是一个例子,我正在进行一个新的项目,其中的事情已经以某种方式完成了。 – synkyo
我搞砸了我的路线::组的格式,但是这一切都没有 – synkyo