从路由模型绑定中返回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); 
+0

我搞砸了我的路线::组的格式,但是这一切都没有 – synkyo

经过一番思考,我意识到我可以定义一个新的异常来抛出,然后简单地捕获该异常类型。

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