2017-05-17 1 views
1

J'utilise l'assistant response() sur HTTP Response comme documenté. L'utilisation simple:Personnalisation de la réponse JSON avec des clés d'index supplémentaires

response()->json(
    $this->response, 
    $this->status 
)->withHeaders([]); 

Affichera:

{ 
    "key" : "desired response" 
} 

Cependant, je voulais ajouter une clé sur la réponse:

$return['message'] = 'Request successful'; 
$return['data'] = response()->json(
    $this->response, 
    $this->status 
)->withHeaders([]); 

Mais la réponse a abouti à:

{ 
    "message": "Request successful", 
    "data": { 
    "headers": {}, 
    "original": { 
     "key" : "desired response" 
    }, 
    "exception": null 
    } 
} 

Il y a des touches supplémentaires sur la réponse: headers, original & exception. Comment puis-je me débarrasser de ce pour parvenir à ce format souhaité:

{ 
    "message": "Request successful", 
    "data": { 
     "key" : "desired response" 
    } 
} 
+0

pourquoi ne pas utiliser la réponse de retour() -> JSON() ...? –

+0

@ MortaddaJafar- J'utilise cela, comme vous pouvez le voir sur mon post, c'est juste que chaque fois que je voulais ajouter des touches personnalisées, il ne renvoie pas ma réponse prévue et il ajoute des clés (exception, en-têtes, original) t besoin. –

+0

oui, vous pouvez le faire simplement en utilisant la réponse de retour() -> json (YOUR DATA ,,) .. –

Répondre

0

Vous pouvez vous Laravel Provider

php artisan make:provider ResponseMacroServiceProvider 

<?php 

namespace App\Providers; 

use Response; 
use Illuminate\Support\ServiceProvider; 

class ResponseMacroServiceProvider extends ServiceProvider 
{ 

    /** 
    * Bootrap the application service 
    */ 
    public function boot() { 
     Response::macro('success', function ($headers, $originals) { 
      return Response::json([ 
       'message' => "Request successful", 
       'data' => [ 
        'headers' => $headers, 
        'original' => $originals, 
       ], 
       'error' => [ 
        'code' => 0 , 
        'message' => [] 
       ] 
      ]); 
     }); 


     Response::macro('error', function ($message, $status = 400) { 
      if(is_array($message)) 
       $message_repsonse = $message; 
      else 
       $message_repsonse = [$message]; 
      return Response::json([ 
       'message' => "Request failed", 
       'data' => [ 
        'headers' => null, 
        'original' => null, 
       ] 
       'error' => [ 
        'code' => $status, 
        'message' => $message_repsonse 
       ] 
      ]); 
     }); 
    } 

    /** 
    * Register application service 
    * @override 
    */ 
    public function register() { 

    } 

} 

Modifier votre config/app.php

/* 
* Application Service Providers... 
*/ 
App\Providers\ResponseMacroServiceProvider::class, 

Et essayer de manipuler à votre Controller

$headers = 'Your header'; 
$originals = Your_Model::find(1); 

return response()->success($headers, $originals); 

return response()->error($validator->errors()->all(), 300); 
+0

Non, j'essaie d'éliminer les en-têtes et les originaux. En fonction de votre suggestion, cela inclut cela. Et j'utilise Lumen, semble que ce fournisseur n'est pas disponible dans 'make:' de l'artisan. –

0

vous pouvez le faire en utilisant ce code:

$return =[] ; 
$return['message'] = 'Request successful'; // your message 
$return['data'] = $this->response; // your data 
return response()->json( // return json 
    $return, // your data here 
    $this->status // status here 
);