我想在Laravel中创建一个API优先的应用程序。我不知道最好的方法是什么,我会解释一下我想做的事情,但请随意提供其他方法。
我不希望所有前端都是用javascript编写的,并使用angular.js或类似的东西解析API的JSON输出。我希望我的Laravel应用程序生成HTML视图。我正在尝试采用有两个控制器的方式,一个用于API,另一个用于Web。对于show User action,我的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回答,但我仍然认为可能有更好的设计方式。