我正在做一个laravel项目,我必须为Web应用程序以及具有相同业务逻辑的API编写代码。
由于业务逻辑没有差异,因此我正在考虑以特征编写代码,并在不同的控制器中使用它们,并根据请求标头发送响应。这样,相同的代码将同时为网络应用程序和移动应用程序提供服务。
使用特征,我可以编写不同的路由,并轻松地为Web和API创建不同的控制器。
例如
In web.php
Route::get('users','UsersController@index');
In api.php
Route::get('users','Api\UsersController@index');
然后使用trait我只能编写一个称为index的函数或如下所示的任何其他名称。 现在,我使用Request类的wantJson()方法检查请求是否需要json。
public function index(Request $request){
$users = User::all();
if($request->wantsJson()){
return response()->json(['users',$users]);
}
return view('uses.index',compact('users'));
}
有没有更好的方法可以做到这一点?
答案 0 :(得分:0)
创建服务,然后将您的通用代码放入其中并使用它。
在Laravel应用程序上,只需进入app/Services
,然后创建一个类:[Something]Service
。添加[Some]()
方法并粘贴代码以创建新实体
public function index(Request $request)
{
$users = User::all();
if($request->wantsJson()){
$users = response()->json(['users',$users]);
}
return $users;
}
现在,您可以编辑UsersController并通过构造函数注入服务,因此可以将其用作属性。
最后,您的控制器方法应如下所示:
public function webControllerFunction(Request $request)
{
$users = $this->[Something]Service->index($request);
return view('uses.index',compact('users'));
}
public function apiControllerFunction(Request $request)
{
return $this->[Something]Service->index($request);
}