我想在Laravel中创建一个API第一个应用程序。我不知道最佳做法是什么,我会解释我正在尝试做什么,但请随时以不同的方式回答如何做到这一点。如何在Laravel中创建REST API第一个Web应用程序
我不希望我所有的前端都用javascript编写,并用angular.js或类似的东西解析API的JSON输出。我想让我的Laravel应用程序生成HTML视图。我正试图走上两个控制器,一个用于API,另一个用于Web。为展示用户操作我的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回答,但我仍然认为,有可能是一个更好的方法如何设计这个
马丁你好,我有同样的问题要在Laravel 5.1中解决。那么,你是如何实施的?你有没有使用Repositor模式? – Ashish
@Ashish,当我问这个时,我和Nyan的答案一起去了。这似乎是最简单的解决方案,并做了我所需要的。虽然我还没有与Laraval 5.1合作,但不知道自那以后发生了什么变化。 –
您是否为Web和API创建单独的控制器,如果是的话,您是如何设法防止代码重复的,我想知道存储库设计模式,我们只能将DB逻辑移出控制器 – Ashish