【发布时间】:2014-05-31 16:06:32
【问题描述】:
我想在 Laravel 中创建一个 API 第一个应用程序。我不知道这样做的最佳方法是什么,我将解释我正在尝试做的事情,但请随时给出答案如何以不同的方式做到这一点。
我不希望我的所有前端都用 javascript 编写,并使用 angular.js 或类似的东西解析 API 的 JSON 输出。我希望我的 Laravel 应用程序生成 HTML 视图。我正在尝试使用两个控制器,一个用于 API,一个用于 Web。对于 show User 操作,我的 routes.php 如下所示:
# the web controller
Route::controller('user', 'WebUserController');
# the api controller
Route::group(array('prefix' => 'api'), function() {
Route::resource('user', 'UserController');
});
所以/user 将带我到WebUserController 和/api/user 将带我到UserController。现在我想把我所有的逻辑放在 API UserController 中,并从 WebUserController 调用它的动作。这是它们的代码:
class UserController extends BaseController
{
public function show($id)
{
$user = User::find($id);
return Response::json(array('success'=>true,'user'=>$user->toArray()));
}
}
class WebUserController extends UserController
{
public function getView($id)
{
# call the show method of the API's User Controller
$response = $this->show($id);
return View::make('user.view')->with('data', $response->getData());
}
}
在WebUserController 中,我可以使用getData() 获取响应的json 内容,但我无法获取标头和状态代码(它们是Illuminate\Http\JsonResponse 的受保护属性)。
我认为我的方法可能不是最好的,因此我愿意接受有关如何制作此应用程序的建议。
编辑:Drew Lewis 已经回答了如何获取响应的标题和状态的问题,但我仍然认为可能有更好的方法来设计它
【问题讨论】:
-
你好 Martin,我在 Laravel 5.1 中有同样的问题要解决。那么,你是如何实现的?你用 Repositor 模式了吗?
-
@Ashish,当我问这个问题时,我同意了 Nyan 的回答。这似乎是最简单的解决方案,并且做了我需要的。不过我还没有使用过 Laraval 5.1,不知道从那以后发生了什么变化。
-
你是否为 Web 和 API 创建了单独的控制器,如果是,你是如何设法防止代码重复的,我想通过存储库设计模式,我们只能将数据库逻辑移出控制器
标签: php api rest laravel controller