2017-06-13 4 views
-1

zurückgegeben werden Wie kann ich meine Controller machen, dass es zurückgegebene Daten ist ein JSON, indem Sie meinen Code nicht wiederholen.Laravel, wie alle Controller Daten als JSON

Probe-Controller

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'); 
    } 
} 

wie man sehen kann ich diesen Abschnitt wiederholt haben zweimal

return response($result, 200) 
->header('Access-Control-Allow-Origin', '*') 
->header('Content-Type', 'application/json'); 

Gibt es einen Weg, dies in einer viel besseren Weise zu tun?

Antwort

1

Erstellen Sie eine Eigenschaft, die Sie in jede Steuerung einfügen, die bestimmte Logik wiederverwenden muss. Sie könnten abstrakt diese Zeilen in einer Funktion innerhalb der Eigenschaft wie folgt:

trait MyResponseTrait{ 

    public function successfulResponse($result) 
    { 
     return response($result, 200) 
     ->header('Access-Control-Allow-Origin', '*') 
     ->header('Content-Type', 'application/json'); 
    } 
} 

Und Ihr Code wie folgt aussehen:

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) 

    } 
} 

Beachten Sie, dass die Trait innerhalb der Controller enthalten müssen, für Beispiel:

class Controller extends BaseController 
{ 
    use MyResponseTrait; 
    // Will be able to call successfulResponse() inside here... 
} 

Mehr zu traits ...

ich hoffe, das geholfen!

2

Laravel enthält eine JSON-Antwort, aber Laravel 5.4 gibt auch JSON aus, wenn Sie nur die Sammlung zurückgeben.

Die JSON Antwort doc:

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

JSON Antworten

Die json Methode application/json den Content-Type-Header automatisch eingestellt wird, sowie wandeln die gegebenen Array JSON mit der json_encode PHP-Funktion:

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

Wenn Sie wo ULD gerne eine JSONP Antwort erstellen, können Sie die json Methode in Kombination mit der withCallback Methode verwenden:

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

Darüber hinaus, eine einfache Möglichkeit, wiederholte Logik auszuführen ist es ein Verfahren zur Extraktion in der Basis-Controller-Klasse.

Verwandte Themen