如何通过不重复我的代码使我的控制器返回的数据是json。
样本控制器
public function getTeams(Request $request){
$result = Team::where('competitionId',$request->input('competitionId',9224))
->orderBy('teamName')
->get(['teamId as id','teamName as name']);
return response($result, 200)
->header('Access-Control-Allow-Origin', '*')
->header('Content-Type', 'application/json');
}
public function getTeamStats(Request $request) {
if($request->id){
$result = TeamCompetitionStatistics::getTeamStats($request->id);
return response($result, 200)
->header('Access-Control-Allow-Origin', '*')
->header('Content-Type', 'application/json');
}
}
你可以看到我已经两次重复这一部分了
return response($result, 200)
->header('Access-Control-Allow-Origin', '*')
->header('Content-Type', 'application/json');
他们是以更好的方式做到这一点吗?
答案 0 :(得分:3)
Laravel包含JSON响应,但如果您只是返回集合,Laravel 5.4也会输出JSON。
JSON响应文档:
https://laravel.com/docs/5.4/responses#json-responses
JSON回复
json方法会自动将Content-Type标头设置为application / json,并使用json_encode PHP函数将给定数组转换为JSON:
return response()->json([
'name' => 'Abigail',
'state' => 'CA'
]);
如果您想创建JSONP响应,可以将json方法与withCallback方法结合使用:
return response()
->json(['name' => 'Abigail', 'state' => 'CA'])
->withCallback($request->input('callback'));
除此之外,执行重复逻辑的一种简单方法是将其提取到基本控制器类中的方法。
答案 1 :(得分:1)
创建一个Trait,您将在每个需要重用某些逻辑的控制器中包含该Trait。您可以在特征内的函数中抽象这些行,如下所示:
trait MyResponseTrait{
public function successfulResponse($result)
{
return response($result, 200)
->header('Access-Control-Allow-Origin', '*')
->header('Content-Type', 'application/json');
}
}
您的代码将如下所示:
public function getTeams(Request $request){
$result = Team::where('competitionId',$request->input('competitionId',9224))
->orderBy('teamName')
->get(['teamId as id','teamName as name']);
return successfulResponse($result);
}
public function getTeamStats(Request $request) {
if($request->id){
$result = TeamCompetitionStatistics::getTeamStats($request->id);
return successfulResponse($result)
}
}
请注意,您必须在控制器中包含特征,例如:
class Controller extends BaseController
{
use MyResponseTrait;
// Will be able to call successfulResponse() inside here...
}
更多关于traits ...
我希望这有帮助!