2017-06-13 82 views
-1

如何使我的控制器返回的數據是一個json不重複我的代碼。Laravel如何使所有控制器返回數據爲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'); 

是他們的一種方式,以更好的方式做到這一點?

回答

1

創建一個特徵,您將包含在每個需要重用某些邏輯的控制器中。你可以抽象的特質裏面的函數的那些行,像這樣:

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 ...

我希望這幫助!

2

Laravel包含JSON響應,但如果您只返回集合,則Laravel 5.4也會輸出JSON。

JSON響應DOC:

https://laravel.com/docs/5.4/responses#json-responses

JSON響應

JSON的方法將自動設置Content-Type頭爲application/JSON,以及給定的數組轉換成JSON使用PHP函數json_encode:

return response()->json([ 
    'name' => 'Abigail', 
    'state' => 'CA' 
]); 

如果你和我ULD想要創建JSONP響應,則可以組合使用JSON方法與withCallback方法:

return response() 
     ->json(['name' => 'Abigail', 'state' => 'CA']) 
     ->withCallback($request->input('callback')); 

除此之外,一個簡單的方法來執行重複的邏輯將其提取到的一個方法基礎控制器類。

相關問題