从路径模型绑定中返回Laravel 4中的JSON响应

时间:2015-04-23 10:15:44

标签: php angularjs laravel laravel-4

我正在创建一个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);

2 个答案:

答案 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,然后发送您想要的响应。